2015-05-06 56 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編譯選項編譯代碼。