在 x86_64 macOS 中使用自制程序安装的 g++@12 指定“-fsanitize=address”时出现“ld:找不到 -lasan 的库”错误

问题描述 投票:0回答:1

使用

-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

环境

  • macOS 索诺玛 14.3.1
  • CPU x86_64
  • g++-12(自制 GCC 12.3.0)12.3.0
  • 自制4.2.7
  • 命令行工具路径:/Library/Developer/CommandLineTools/SDKs/MacOSX14.2.sdk

我做了什么

我重新安装了 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
是否可以。

我可以尝试修复该错误吗?

macos gcc g++ homebrew address-sanitizer
1个回答
0
投票

x86_64 macOS 似乎不再支持消毒剂(自 Ventura 以来)。

https://github.com/orgs/Homebrew/discussions/3384#discussioncomment-6264292

© www.soinside.com 2019 - 2024. All rights reserved.