Apple M1 Pro设备安装R包NORMT3失败,求解决方法
解决M1芯片MacBook Pro安装R包NORMT3失败的问题
核心错误分析
从安装日志可明确,失败根源是架构不兼容:
- clang编译C代码采用x86_64架构,而gfortran编译Fortran代码(toms680-1.o)生成的是arm64架构文件
- 链接器因此忽略了Fortran目标文件,最终导致加载时缺失
_wofz_符号(该符号由Fortran代码定义)
解决方案
方案1:通过Rosetta 2以x86_64架构安装
- 找到「终端」应用,右键选择「显示简介」,勾选「使用Rosetta打开」
- 重启终端,重新执行安装命令:
wget https://cran.r-project.org/src/contrib/Archive/NORMT3/NORMT3_1.0.4.tar.gz R CMD install NORMT3_1.0.4.tar.gz - 原理:Rosetta 2让终端以x86_64模式运行,gfortran会编译出对应架构的目标文件,消除架构不匹配问题。
方案2:统一使用arm64编译环境
- 确保安装的是Apple Silicon版本的R(从CRAN下载对应安装包,不要选x86_64版本)
- 在arm64模式的终端下(不启用Rosetta),通过Homebrew安装arm64版gfortran:
brew install gcc - 重新执行原安装命令,此时clang和gfortran都会以arm64架构编译代码,链接过程正常。
方案3:修改包的编译配置(进阶)
- 先解压安装包:
tar -xzf NORMT3_1.0.4.tar.gz - 进入解压后的
NORMT3/src目录,新建或修改Makevars文件,添加以下内容强制指定arm64架构:CC=clang CFLAGS=-arch arm64 -mmacosx-version-min=11.0 FC=gfortran FFLAGS=-arch arm64 -mmacosx-version-min=11.0 - 重新打包并安装:
tar -czf NORMT3_1.0.4_mod.tar.gz NORMT3 R CMD install NORMT3_1.0.4_mod.tar.gz
内容的提问来源于stack exchange,提问作者Ssank
相关产品推荐
相关产品推荐

