我需要哪个包才能将 clang 与 asan 结合使用?

我需要哪个包才能将 clang 与 asan 结合使用?

clang++使用和编译时出现此错误-fsanitize=address -m32

/usr/bin/ld: cannot find /usr/lib/llvm-3.6/bin/../lib/clang/3.6.0/lib/linux/libclang_rt.asan-i386.a: No such file or directory
/usr/bin/ld: cannot find /usr/lib/llvm-3.6/bin/../lib/clang/3.6.0/lib/linux/libclang_rt.asan_cxx-i386.a: No such file or directory

我需要哪个包?我已经尝试过libclang-3.6-dev

clang 3.7我还遇到了一个错误-m64

/usr/bin/ld: cannot find /usr/lib/llvm-3.7/bin/../lib/clang/3.7.1/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory
/usr/bin/ld: cannot find /usr/lib/llvm-3.7/bin/../lib/clang/3.7.1/lib/linux/libclang_rt.asan_cxx-x86_64.a: No such file or directory

clang 3.7(和 3.8)的错误-m64仅发生在 travis-ci 上 - 这意味着我在使用 3.4/3.5/3.6 时没有遇到任何问题。

答案1

正如其他人所说,这是 clang-3.7 和 clang-3.8 打包方式中的一个错误:https://llvm.org/bugs/show_bug.cgi?id=22757

幸运的是,安装后修复损坏的软件包并不难。你只需要下载正确的库,并将它们放在正确的目录中。

首先,转到http://llvm.org/releases/download.html并找到匹配的版本。我运行的是 64 位 Ubuntu 14.04,因此要修补 clang-3.8,我需要“Clang for x86_64 Ubuntu 14.04”。直接下载,或复制右键单击并“复制链接地址”并使用 wget:

wget http://llvm.org/releases/3.8.0/clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz

解压缩:

tar -xf clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz

然后复制库文件(使用 -n 以避免覆盖现有文件):

sudo cp -n clang+llvm-3.8.0-x86_64-linux-gnu/lib/clang/3.8.0/lib/linux/*.a /usr/lib/llvm-3.8/lib/clang/3.8.0/lib/linux/

如果需要,请对已安装的任何旧版本的 clang 重复此操作,但请注意,如果您使用的 Linux 内核比 4.1 更新,而 clang 版本早于 3.8,您可能会遇到 -fsanitize=memory 的另一个错误:https://llvm.org/bugs/show_bug.cgi?id=24155

答案2

显然有一个漏洞clang 3.7 和 3.8 中缺少 asan。

关于 3.6 的 32 位问题 - 我认为我需要-libclang-3.6-dev:i386libclang-common-3.6-dev:i386尚未测试 - 因为

相关内容