Mac Catalina升级R 4.1.1后安装R包编译失败,提示stdio.h相关错误
问题诱因
- 核心冲突是SDK版本不匹配:你设备上全局默认的
MacOSX.sdk软链接指向了MacOS 11.1版本的SDK,但实际运行系统为10.15.7 Catalina。R编译依赖包时会调用/usr/local/opt/llvm/bin/clang编译器并引用MacOSX.sdk下的头文件,高版本SDK头文件中使用的TARGET_OS_IPHONE宏未被你当前版本的Clang编译器预定义,同时R的默认编译配置开启了-Werror类校验规则,未定义的宏直接触发编译失败。 - 辅助冲突点:系统全局的gcc、xcrun工具均已适配10.15版本SDK,和R调用的LLVM Clang的SDK配置不一致,进一步加剧了头文件引用混乱。
修复方案
方案1:修改R编译配置指定SDK路径(优先尝试,无需改动系统配置)
- 找到或新建R的编译配置文件
~/.R/Makevars - 在文件中添加以下配置,强制R编译时使用匹配系统的10.15版本SDK:
SDKROOT = /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk CFLAGS += -isysroot $(SDKROOT) CXXFLAGS += -isysroot $(SDKROOT) CPPFLAGS += -isysroot $(SDKROOT) -DTARGET_OS_IPHONE=0
- 保存文件后重启R,重新尝试安装依赖包即可
方案2:修改全局SDK软链接
如果方案1无效,直接修改SDK默认软链接指向10.15版本,执行终端命令:sudo ln -sf /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
执行完成后重启R再尝试安装包即可
方案3:重装CommandLineTools
如果前两个方案均失效,再卸载现有CommandLineTools后重装适配10.15的版本即可,无需完全重装Xcode:
- 执行终端命令卸载现有工具:
sudo rm -rf /Library/Developer/CommandLineTools - 执行终端命令触发安装:
xcode-select --install,按提示完成安装后重启R即可
内容的提问来源于stack exchange,提问作者Holt Dwyer
相关产品推荐
相关产品推荐

