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

M1 Mac使用Clang 13编译时架构不匹配错误的原因及解决方法

问题分析与解决方案

环境信息

GCC版本验证

执行gcc --version得到:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 13.0.0 (clang-1300.0.29.30)
Target: arm64-apple-darwin21.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Ranlib工具信息

验证ranlib版本时:

% ranlib --version
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: unknown option character `-' in: --version
Usage: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib [-sactfqLT] [-] archive [...]
(base) user@user BUILD_DIR % ranlib -version 
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: unknown option character `v' in: -version
Usage: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib [-sactfqLT] [-] archive [...]

PATH环境变量

执行echo $PATH输出:

% echo $PATH
/usr/bin:/Users/username/opt/anaconda3/bin:/Users/username/opt/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin

完整环境变量(env输出)

% env
TERM_PROGRAM=Apple_Terminal
SHELL=/bin/zsh
TERM=xterm-256color
TMPDIR=/var/folders/9x/gdg5j9sd4wx3q_v9f2pkrw6r0000gn/T/
TERM_PROGRAM_VERSION=445
TERM_SESSION_ID=C5417ED9-E4C8-411C-9CC3-18711A679E88
USER=username
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.nCSXSuYzna/Listeners
PATH=/usr/bin:/Users/username/opt/anaconda3/bin:/Users/username/opt/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin

构建错误信息

执行configure后用make构建项目时,出现如下链接错误:

ld: warning: ignoring file /usr/local/Cellar/gcc/11.3.0_2/lib/gcc/11/libquadmath.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: in '/usr/local/Cellar/gcc/11.3.0_2/lib/gcc/11/libquadmath.0.dylib', building for macOS-x86_64 but attempting to link with file built for macOS-arm64
collect2: error: ld returned 1 exit status
make[8]: *** [libfgsl.la] Error 1
make[7]: *** [subdir-fgsl] Error 2
make[6]: *** [build-fgsl] Error 2
make[5]: *** [hd-std-all-subdirs] Error 2
make[4]: *** [all-subdirs] Error 2
make[3]: *** [hd-std-all] Error 2
make[2]: *** [all] Error 2
make[1]: *** [heacore] Error 2
make: *** [all] Error 2

已尝试操作

  • 更新CMake
  • 尝试修改CMAKE_OSX_ARCHITECTURES配置项,但未在cmake中找到该选项

错误原因分析

  1. 架构不匹配:当前构建目标是macOS-x86_64(Intel架构),但链接的libquadmath.dylib是为macOS-arm64(M系列芯片)编译的,导致链接器拒绝兼容。
  2. 工具链混淆:系统默认的gcc实际是Apple Clang(arm64版本),但/usr/local/Cellar下的GCC是arm64版本,而构建过程可能强制使用了x86_64架构编译,引发交叉链接冲突。
  3. Anaconda环境干扰:PATH中Anaconda目录优先级靠前,可能引入了x86_64版本的依赖或工具,导致构建过程自动切换到Intel架构。

修复方案

方案1:统一构建架构为arm64

在执行configure前,设置环境变量强制使用arm64架构:

export ARCHFLAGS="-arch arm64"
export CC="/usr/bin/clang"
export CXX="/usr/bin/clang++"

然后重新执行构建流程:

./configure
make clean && make

方案2:移除冲突的arm64版本GCC

如果不需要Homebrew安装的GCC,直接卸载:

brew uninstall gcc@11

卸载后重新执行构建,让系统使用默认的Apple Clang工具链。

方案3:调整PATH优先级,避免工具链混淆

修改PATH,让系统默认工具链优先于Anaconda和Homebrew目录:

export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/username/opt/anaconda3/bin:/Users/username/opt/anaconda3/condabin:/opt/X11/bin:/Library/Apple/usr/bin"

重启终端后重新执行构建命令。

方案4:使用Rosetta 2运行终端(适配x86_64架构)

如果项目必须用x86_64架构编译:

  1. 找到“终端”应用,右键选择“显示简介”
  2. 勾选“使用Rosetta打开”
  3. 重启终端,重新执行configure和make,此时会自动使用x86_64版本的工具链,避免与arm64库冲突。

内容的提问来源于stack exchange,提问作者Py-ser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:40:30