在FreeBSD 10.1 Release上链接clang地址清理程序

时间:2015-05-06 18:42:06

标签: c clang llvm freebsd

我正在尝试使用FreeBSD 10.1 Release进行地址清理程序,但每当我尝试使用-fsanitize=address编译程序时,我会得到_asan_stack_malloc_1等未定义的引用,我发现
谷歌https://forums.freebsd.org/threads/gcc-clang-address-sanitizer.47985/,但添加-L/usr/local/lib -I/usr/local/include的建议无法解决链接问题。我为FreeBSD尝试了llvm二进制文件,但是当我使用该clang进行编译时,我得到了/usr/bin/../lib/clang/3.6.0/lib/freebsd/libclang_rt.asan-x86_64.a , no such file or directory.。无论哪种方式,我都不确定我需要链接哪个库或它在哪里。

下面是我尝试编译的程序,这是我使用的命令, clang -fsanitize=address san.c

#include <stdio.h>

int main(void)
{
    return 0;
}

2 个答案:

答案 0 :(得分:1)

要在FreeBSD上使用asan,您可以使用asan支持构建llvm,如下所示,或者您可以从Kevinoid的答案中的packages / ports安装。

第一步,抓住最新的稳定llvm源。

fetch http://llvm.org/releases/3.9.0/llvm-3.9.0.src.tar.xz

现在解压缩llvm源目录。

tar -xvf llvm-3.9.0.src.tar.xz

接下来将目录更改为llvm并获取clang源文件。

cd llvm-3.9.0.src/tools && fetch http://llvm.org/releases/3.9.0/cfe-3.9.0.src.tar.xz

解压缩铿锵。

tar -xvf cfe-3.9.0.src.tar.xz

进入projects目录并获取compiler-rt。

cd ../projects && fetch http://llvm.org/releases/3.9.0/compiler-rt-3.9.0.src.tar.xz

解压缩compiler-rt。

tar -xvf compiler-rt-3.9.0.src.tar.xz

转到root llvm目录并为cmake创建一个构建目录。

cd ../ && mkdir build && cd build

使用cmake设置llvm构建。

cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON [-DLLVM_ENABLE_WERROR=ON] [-DLLVM_TARGETS_TO_BUILD=X86] -DBUILD_SHARED_LIBS=ON ../

建立llvm并去喝茶,这需要一点时间。

make -j12

如果构建工作,你应该留下asan支持clang。请务必删除旧的编译器/usr/bin/clang/usr/bin/clang++/usr/bin/cc。 然后通过执行sudo make install安装新的clang。最后,您可能希望通过运行/usr/bin/cc/usr/local/bin/clangsudo ln /usr/local/bin/clang /usr/bin/cc相关联。

完成所有这些步骤后,您应该能够使用-fsanitize=address编译选项编译代码。

答案 1 :(得分:1)

作为构建LLVM的替代方法as suggested in this answer on Unix SE,您可以从端口安装llvm37,端口支持AddressSanitizer,并使用它构建:

# pkg install llvm37
$ clang37 -fsanitize=address san.c