Apple Silicon上使用-fsanitize=address编译C++程序报错求助
解决MacOS下Homebrew g++-13编译时找不到-lasan的问题
核心问题排查
- 你当前执行的
g++命令大概率是Mac自带clang的别名,而非Homebrew安装的g++-13。clang的AddressSanitizer机制与gcc不同,不需要手动链接-lasan,但gcc依赖自身的asan库完成链接。 - 你设置的
LDFLAGS指向了llvm的库路径,这会干扰gcc查找自身的asan库,导致链接失败。
具体解决步骤
调用正确的gcc命令
直接使用Homebrew安装的g++-13命令,替换系统默认的g++:g++-13 -std=c++17 -o x x.cpp -fsanitize=address -g清理冲突的环境变量
临时取消指向llvm的LDFLAGS(仅当前终端会话生效):unset LDFLAGS若要永久生效,打开你的shell配置文件(如
~/.zshrc或~/.bashrc),注释掉设置LDFLAGS指向llvm的行,再执行source ~/.zshrc(对应你的shell类型)使修改生效。手动指定gcc的asan库路径(若上述步骤仍报错)
先获取Homebrew gcc的安装前缀:brew --prefix gcc假设输出为
/opt/homebrew/opt/gcc,编译时手动添加库路径:g++-13 -std=c++17 -o x x.cpp -fsanitize=address -g -L$(brew --prefix gcc)/lib/gcc/13验证gcc的库搜索路径
查看g++-13的默认库搜索路径,确认asan库所在路径是否被包含:g++-13 --print-search-dirs检查输出中
libraries:部分,是否包含/opt/homebrew/opt/gcc/lib/gcc/13这类路径。
额外说明
- Homebrew安装的gcc自带asan库,只要使用正确命令且环境变量无干扰,就能正常完成链接。
- 若需同时使用llvm工具,建议在不同终端会话中设置独立环境变量,或通过
brew link --overwrite llvm/brew unlink llvm临时切换,避免路径冲突。
内容的提问来源于stack exchange,提问作者Vedanta Mohapatra
相关产品推荐
相关产品推荐

