You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86_64 macOS下Homebrew版g++@12启用AddressSanitizer时-lasan库缺失求助

macOS Sonoma下Homebrew gcc@12使用AddressSanitizer报错ld: library not found for -lasan

编译命令及错误输出:

$ 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 Sonoma 14.3.1
  • CPU:x86_64
  • g++-12 (Homebrew GCC 12.3.0) 12.3.0
  • Homebrew 4.2.7
  • 命令行工具SDK路径:/Library/Developer/CommandLineTools/SDKs/MacOSX14.2.sdk

已尝试操作

  • 重新安装gcc@12,问题未解决;
  • 查找系统中asan相关文件,未找到gcc@12对应的libasan.dylib,find命令输出如下:
$ 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

解决办法建议

1. 改用Clang/LLVM的AddressSanitizer

系统自带的Clang或Homebrew安装的LLVM已完整支持ASAN,直接替换编译命令即可:

# 使用系统自带Clang
$ clang++ --std=c++20 -g -fsanitize=address ./main.cpp -o a.out
# 使用Homebrew安装的LLVM版本
$ /usr/local/opt/llvm/bin/clang++ --std=c++20 -g -fsanitize=address ./main.cpp -o a.out

此方式无需额外配置,可直接正常使用ASAN功能。

2. 手动编译带libsanitizer支持的gcc@12

Homebrew默认gcc@12配方未开启--enable-libsanitizer,可手动编译:

  • 卸载现有gcc@12:brew uninstall gcc@12
  • 编辑Homebrew的gcc@12配方:brew edit gcc@12
  • 在配方的args参数列表中添加--enable-libsanitizer
  • 重新编译安装:brew install gcc@12 --build-from-source
    注意:手动编译GCC耗时较长,需确保系统已安装完整编译依赖(如Xcode Command Line Tools、make等)。

3. 降级到gcc@9使用ASAN

从find结果可知gcc@9自带libasan.dylib,若必须使用GCC的ASAN,可降级到gcc@9:

$ brew install gcc@9
$ g++-9 --std=c++20 -g -fsanitize=address ./main.cpp -o a.out

此方式无需额外编译,但gcc@9对C++20的支持不如gcc@12完善。

内容的提问来源于stack exchange,提问作者nemupm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:45:55