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

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库,导致链接失败。

具体解决步骤

  1. 调用正确的gcc命令
    直接使用Homebrew安装的g++-13命令,替换系统默认的g++:

    g++-13 -std=c++17 -o x x.cpp -fsanitize=address -g
    
  2. 清理冲突的环境变量
    临时取消指向llvm的LDFLAGS(仅当前终端会话生效):

    unset LDFLAGS
    

    若要永久生效,打开你的shell配置文件(如~/.zshrc或~/.bashrc),注释掉设置LDFLAGS指向llvm的行,再执行source ~/.zshrc(对应你的shell类型)使修改生效。

  3. 手动指定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
    
  4. 验证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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:59:59