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

M1芯片Mac安装GSL后编译C++程序报arm64链接错误如何解决

问题原因

链接器报错的核心原因是架构不匹配:你当前编译的目标是M1芯片原生的arm64架构程序,但你安装的GSL库是x86_64架构版本,无法被链接。
从你给出的信息可以直接验证:

  • 链接器明确提示/usr/local/lib路径下的libgsl.dylib、libgslcblas.dylib是为x86_64架构构建,被直接忽略
  • 你安装的GSL位于/usr/local/Cellar路径下,这是Rosetta转译运行的x86版本Homebrew的默认安装位置;M1芯片原生arm64版本Homebrew的默认安装路径为/opt/homebrew,对应安装的库才是arm64架构。
解决步骤
  • 先清理错误架构的GSL:终端执行/usr/local/bin/brew uninstall gsl删掉x86版本的GSL
  • 如果你还没装过arm64原生版本的Homebrew,先完成原生Homebrew安装,安装完成后确认终端执行which brew输出为/opt/homebrew/bin/brew
  • 用原生arm64版本的brew安装GSL:执行brew install gsl
  • 修改Makefile中的编译链接配置,不要硬编码写死/usr/local下的头文件、库路径,改用pkg-config自动获取适配当前架构的GSL编译参数:
    • 终端执行pkg-config --cflags --libs gsl,确认输出的路径包含/opt/homebrew,说明能正确识别arm64版本的GSL
    • 将Makefile中GSL相关的头文件搜索参数(-I开头)、库搜索参数(-L开头)、链接库参数(-lgsl -lgslcblas)替换为上述命令的输出,也可以直接在编译指令中嵌入pkg-config --cflags --libs gsl的执行结果
  • 清理之前编译生成的中间文件:如果Makefile有clean规则就执行make clean,没有的话手动删除所有.o后缀的目标文件,再重新执行make编译即可。
临时兼容方案(不推荐)

如果暂时不想重装原生版本GSL,也可以强制编译x86_64架构的程序,通过Rosetta转译运行:在Makefile的编译、链接参数中添加-arch x86_64即可。但这种方案运行性能更低,后续安装其他依赖时还会反复遇到架构不匹配问题,优先选择原生arm64的配置方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:27:17