Mac M1设备在Anaconda中更新R包出现clang-12错误求助
问题根因
报错的核心原因是当前Anaconda环境中的R为x86_64架构,运行在M1设备的Rosetta转译层上,其调用的x86版本clang编译器与M1设备新版Command Line Tools提供的arm64优先的系统SDK不兼容,源码编译R包时在链接阶段失败,所有需要源码编译的R包都会触发相同报错,核心错误标识为:
ld: unsupported tapi file type '!tapi-tbd' in YAML file '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libSystem.tbd' for architecture x86_64
解决方法(按操作复杂度从低到高排序)
- 优先使用conda命令安装预编译R包:不需要走源码编译流程,可直接规避编译错误。先在终端激活对应的
renvconda环境,执行conda install r-askpass即可,所有conda源中收录的R包都可以通过r-包名的格式安装。 - 强制R安装预编译二进制包:如果需要在R内直接安装CRAN包,调用
install.packages时指定type参数即可跳过源码编译,命令为install.packages("askpass", type = "binary")。 - 更换为arm64架构的Anaconda环境:如果上述方法都无法满足需求,可卸载当前x86架构的Anaconda,安装适配Apple Silicon的arm64版本Anaconda/Miniforge,重建R环境后即可完全解决架构不匹配导致的编译问题。
内容的提问来源于stack exchange,提问作者Kai Li
相关产品推荐
相关产品推荐

