2016-06-22 103 views
18

我試圖建立我的項目,如何在gcc中使用AddressSanitizer?

g++ -O0 -g -fsanitize=address -fno-omit-frame-pointer 

但得到很多類似的錯誤:

/home/user/libs/opencv/include/opencv2/core/mat.hpp:715: undefined reference to `__asan_report_load8' 

如何編譯項目,AddressSanitize支持?

gcc -v

gcc版本4.8.4

+4

這不是完整的編譯行,因爲您沒有文件名。你是通過單獨的步驟編譯/鏈接的嗎?你也忘了提及你正在使用的gcc的版本... –

回答

4

您需要將開關-lasan添加到您的編譯/鏈接命令行來正確的庫鏈接。

20

您需要將-fsanitize=address添加到編譯器標誌(CFLAGSCXXFLAGS)和鏈接器標誌(LDFLAGS)。您可能只會將其添加到您的編譯器標誌。

請注意,不是明確鏈接到-lasan,規範的方法是將-fsanitize=address添加到您的鏈接器標誌。 ASan開發人員廣泛沮喪使用-lasan

+0

如果我跳過'-lasan',我得到'undefined reference to __asan _...' – HeinrichStack

+0

@HeinrichStack很難評論沒有repro。請注意'-fsanitize = address'等價於'-lasan' +其他的東西。 – yugr