Mac M1设备RStudio中rJava加载失败问题求助
问题概况
在Mac M1(arm64架构)设备上运行旧Intel Mac的R项目时,rJava完全无法正常工作,核心问题是Java架构不兼容——系统识别到的是x86_64版本的Java,而M1需要arm64版本。
报错详情
.onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(jli, FALSE)
error: unable to load shared object '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib':
dlopen(/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib, 0x000A): tried: '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib' (no such file), '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/jli/libjli.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64'))
用户曾执行以下命令查看Java路径,但识别位置存在问题:
/usr/libexec/java_home /usr/libexec/java_home /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
尝试手动设置JAVA_HOME但未生效:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
解决步骤
1. 替换为arm64架构的Java
- 卸载现有x86_64版本Java:打开
/Library/Internet Plug-Ins/,删除JavaAppletPlugin.plugin;打开/Library/Java/JavaVirtualMachines/,删除x86版本的JDK文件夹。 - 下载并安装arm64架构的JDK 8或更高版本(选择适配M1的安装包)。
2. 正确配置JAVA_HOME环境变量
- 打开终端,执行命令获取arm64 Java的正确路径:
复制输出的完整路径(例如/usr/libexec/java_home -v 1.8 --arch arm64/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home)。 - 编辑shell配置文件:
- bash用户执行:
nano ~/.bash_profile;zsh用户执行:nano ~/.zshrc。 - 在文件末尾添加:
export JAVA_HOME=/刚才复制的arm64版本JDK路径 export PATH=$JAVA_HOME/bin:$PATH - 按
Ctrl+O保存,Ctrl+X退出编辑。
- bash用户执行:
- 使配置生效:
# bash用户 source ~/.bash_profile # zsh用户 source ~/.zshrc - 验证:执行
echo $JAVA_HOME确认路径正确;执行java -version,输出中应包含aarch64(即arm64架构标识)。
3. 重新安装rJava包
- 打开arm64版本的R/RStudio(可通过
Sys.info()["machine"]查看架构,输出应为arm64)。 - 卸载旧版rJava:
remove.packages("rJava") - 重新安装并测试:
无报错则说明安装成功。install.packages("rJava") library(rJava)
4. 备选方案:用Rosetta 2运行x86版本R
若必须依赖x86架构的Java和项目,可通过Rosetta 2兼容:
- 安装Rosetta 2:终端执行
softwareupdate --install-rosetta。 - 找到R.app,右键「显示简介」,勾选「使用Rosetta打开」。
- 安装x86版本Java,配置对应JAVA_HOME后重新安装rJava。
内容的提问来源于stack exchange,提问作者Gabriella

