使用
-fsanitize=address
选项运行 g++(gcc@12) 时会发生错误。
$ g++-12 --std=c++20 -g -fsanitize=address ./main.cpp -o a.out
ld: library not found for -lasan
collect2: error: ld returned 1 exit status
我重新安装了 gcc@12,但没有任何改变。
我找不到 gcc@12 的 libasan.dylib。
$ find /usr/local -name "*asan*"
/usr/local/Cellar/llvm/17.0.6_1/lib/clang/17/include/sanitizer/asan_interface.h
/usr/local/Cellar/llvm/17.0.6_1/lib/clang/17/include/sanitizer/hwasan_interface.h
/usr/local/Cellar/llvm/17.0.6_1/lib/clang/17/lib/darwin/libclang_rt.asan_abi_osx.a
/usr/local/Cellar/llvm/17.0.6_1/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib
/usr/local/Cellar/llvm/17.0.6_1/lib/clang/17/share/asan_ignorelist.txt
/usr/local/Cellar/gcc/13.2.0/lib/gcc/current/gcc/x86_64-apple-darwin23/13/plugin/include/asan.h
/usr/local/Cellar/gcc@12/12.3.0/lib/gcc/12/gcc/x86_64-apple-darwin23/12/plugin/include/asan.h
/usr/local/Cellar/gcc@9/9.5.0/lib/gcc/9/libasan_preinit.o
/usr/local/Cellar/gcc@9/9.5.0/lib/gcc/9/gcc/x86_64-apple-darwin21/9.5.0/include/sanitizer/asan_interface.h
/usr/local/Cellar/gcc@9/9.5.0/lib/gcc/9/gcc/x86_64-apple-darwin21/9.5.0/plugin/include/asan.h
/usr/local/Cellar/gcc@9/9.5.0/lib/gcc/9/libasan.dylib
/usr/local/Cellar/gcc@9/9.5.0/lib/gcc/9/libasan.5.dylib
$ find /Library/Developer/CommandLineTools -name "*asan*"
/Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/sanitizer/asan_interface.h
...
/Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/lib/darwin/libasan.dylib
/Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib
/Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/lib/darwin/libclang_rt.asan_ios_dynamic.dylib
/Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/lib/darwin/libclang_rt.asan_watchossim_dynamic.dylib
/Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/lib/darwin/libclang_rt.asan_tvossim_dynamic.dylib
/Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/share/asan_ignorelist.txt
/Library/Developer/CommandLineTools/SDKs/MacOSX14.2.sdk/usr/lib/libSystem_asan.tbd
/Library/Developer/CommandLineTools/SDKs/MacOSX14.2.sdk/usr/lib/libSystem.B_asan.tbd
我检查了 AddressSanitizer 的文档,gcc 似乎支持 x86_64 OS X 中的 AddressSanitizer。
我检查了gcc@12的公式,我想知道args不包含
--enable-libsanitizer
是否可以。
我可以尝试修复该错误吗?
x86_64 macOS 似乎不再支持消毒剂(自 Ventura 以来)。
https://github.com/orgs/Homebrew/discussions/3384#discussioncomment-6264292