macOS 14.6下无法为x86_64架构编译GSL求助
问题描述
运行macOS 14.6(Apple Silicon芯片),需为x86_64架构编译GNU科学库(GSL)。当前依赖GSL的Xcode应用编译时出现以下警告,且所有GSL模块无法被找到:
ld: warning: ignoring file '/usr/local/lib/libgsl.28.dylib': found architecture 'arm64', required architecture 'x86_64'
尝试使用INSTALL文件建议的命令编译GSL,执行失败:
./configure CC="gcc -arch i386 -arch x86_64" CXX="g++ -arch x86_64" CPP="gcc -E" CXXCPP="g++ -E"
报错核心内容:
configure: error: cannot run C compiled programs. If you meant to cross compile, use '--host'.
添加--host参数后仍失败:
./configure --host CC="gcc -arch x86_64" CXX="g++ -arch x86_64" CPP="gcc -E" CXXCPP="g++ -E"
报错核心内容:
checking host system type... config.sub: too many arguments configure: error: /bin/sh ./config.sub CC=gcc -arch x86_64 failed
解决思路
1. 正确配置交叉编译参数
--host参数需要指定目标架构的标准三元组,而非直接拼接编译器参数。Apple Silicon上交叉编译x86_64架构GSL的正确命令如下:
./configure --host=x86_64-apple-darwin23.6.0 \ CC="clang -arch x86_64" \ CXX="clang++ -arch x86_64" \ CPP="clang -E -arch x86_64" \ CXXCPP="clang++ -E -arch x86_64" \ --prefix=/usr/local/x86_64-gsl
--prefix指定独立安装路径,避免与已存在的arm64版本GSL冲突- 使用macOS自带的clang而非gcc,跨架构编译支持更稳定
2. 编译并安装
配置完成后执行编译与安装:
# 多线程编译,提升速度 make -j$(sysctl -n hw.ncpu) # 安装到指定路径 sudo make install
3. 验证库架构
安装完成后,确认生成的库为x86_64架构:
lipo -info /usr/local/x86_64-gsl/lib/libgsl.dylib
正常输出应为:Non-fat file: /usr/local/x86_64-gsl/lib/libgsl.dylib is architecture: x86_64
4. Xcode项目配置调整
打开依赖GSL的Xcode项目,在Build Settings中修改:
- Library Search Paths:添加
/usr/local/x86_64-gsl/lib - Header Search Paths:添加
/usr/local/x86_64-gsl/include - Architectures:确保设置为
x86_64(若需通用二进制可保留x86_64 arm64,但编译时需切换对应架构)
备选方案:通过Rosetta 2编译
若交叉编译仍有问题,可借助Rosetta 2在x86_64环境下直接编译:
- 找到终端应用,右键选择显示简介,勾选使用Rosetta打开
- 重启终端,此时终端运行在x86_64兼容模式下
- 执行常规编译命令:
./configure --prefix=/usr/local/x86_64-gsl make -j$(sysctl -n hw.ncpu) sudo make install
此方法无需手动指定架构参数,Rosetta会自动处理环境转换。
内容的提问来源于stack exchange,提问作者Pascal
相关产品推荐
相关产品推荐

