ld:找不到文件:/Library/Developer/../libclang_rt.ubsan_osx_dynamic



>我正在尝试通过像这样构建来使用未定义的行为清理器

gcc -fsanitize=undefined add.c -o add

clang -fsanitize=undefined -O add.c -o add

在这两种情况下,我都收到"找不到文件"错误:

ld: file not found: /Library/Developer/CommandLineTools/usr/bin/../lib/clang/8.0.0/lib/darwin/libclang_rt.ubsan_osx_dynamic.dylib

这是我在运行gcc -vclang -v时得到的输出

Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

根据此新闻稿,它在GCC中可用,并且它的原始主页也说它已合并到LLVM中。链接到文章说GCC 4.9有它,我假设我有(至少 - 版本号似乎不同,但这篇文章是几年前写的,我已经更新了我的系统几次)。

问题:如何构建可执行文件以使用 UBSan?

根据博客周五问答2015-07-03:地址消毒剂 作者:迈克·阿什:

知道为什么苹果叮当不支持-fsanitize=undefined吗?

当我尝试时,我得到:

clang -fsanitize=undefined ub.c
...
ld: file not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/
bin/../lib/clang/8.0.0/lib/darwin/libclang_rt.ubsan_osx_dynamic.dylib

Spencer在 2016-12-21 01:23:59:

如果你使用-fsanitize=address,undefined它可以工作。希望这个 帮助找到这篇文章的其他任何人像我一样搜索该错误。

这对我们来说不是一个理想的解决方案,因为它们是独立的组件,而且我们对环境和工具的控制有限。我们不得不暂停一些地址清理器测试,因为 Asan在 GCC 内联组装和使用 ebp/rbp 作为通用寄存器时会产生不正确的结果。在这里,环境和工具由Travis CI提供。


问题 33201 上向 LLVM 提交了错误报告,与 Xcode 8 捆绑在一起的 Apple Clang 在应该拒绝 -fsanitize=undefined 时不会拒绝。它可能被关闭为题外话,因为它是一个 Apple Clang 错误(我们没有 iTunes 帐户来向 Apple 提交错误)。

为了使用未定义的行为清理器,我必须安装和构建带有clang以及libcxx和libcxxabi的LLVM,即使我的MacOS已经附带了一个版本的clang。(结果我现在在我的计算机上安装了两个版本的 clang)。从 llvm 入门页面

cd where-you-want-llvm-to-live
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
cd where-you-want-llvm-to-live
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd where-you-want-llvm-to-live
svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi

现在,我可以通过运行来使用未定义的行为清理器

/usr/local/bin/clang -fsanitize=undefined -O add.c -o add

相关内容

  • 没有找到相关文章

最新更新