2015-05-06 29 views
1

我试图让地址消毒剂在FreeBSD 10.1版本的工作,但每当我试图编译程序与-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.。无论哪种方式,我不知道什么库我需要链接或它在哪里。在FreeBSD 10.1联铛地址消毒剂发布

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

#include <stdio.h> 

int main(void) 
{ 
    return 0; 
} 
+0

-L在/ usr /本地/在你的链接的lib意味着他们有从ports中编译更新的clang版本并将其安装到/ usr/local中。你做过了吗? –

+0

好点,但'-L/usr/lib'或'-L/lib'也不起作用。 – 2trill2spill

+0

“哪个叮铛声”和“叮咚 - 翻译”的输出是什么? –

回答

1

要使用FreeBSD的阿三,你可以建立与阿三支持LLVM如下图所示,也可以从包安装/像Kevinoid的答案一样。

第一步,抓住最新的稳定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 

输入项目目录并抓住编译器rt。

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

解压缩编译器-rt。

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

转到根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的支持。确保删除旧编译器/usr/bin/clang,/usr/bin/clang++/usr/bin/cc。 然后通过做sudo make install来安装新的叮当声。最后,您可能希望通过运行sudo ln /usr/local/bin/clang /usr/bin/cc/usr/bin/cc链接到/usr/local/bin/clang

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