MacBook(arm64)加载R语言xlsx包遇Java兼容及崩溃问题求助
问题描述
在arm64架构的MacBook上,使用arm64版本的R和RStudio加载xlsx包时遇到架构不兼容及JVM崩溃问题:
- 初始加载错误:
> library(xlsx) Error: package or namespace load failed for ‘xlsx’: .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'))
- 更换arm64版本JRE后,出现JVM致命错误:
# A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00000002880bf2cc, pid=1308, tid=0x0000000000000103 # # JRE version: Java(TM) SE Runtime Environment (8.0_381) (build 1.8.0_381-b09) # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.381-b09 mixed mode bsd-aarch64 compressed oops) # Problematic frame: # v ~StubRoutines::jshort_disjoint_arraycopy # # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again # # If you would like to submit a bug report, please visit: # http://bugreport.java.com/bugreport/crash.jsp
终端执行java -version输出:
java version "1.8.0_381" Java(TM) SE Runtime Environment (build 1.8.0_381-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)
解决建议
方案1:使用无Java依赖的替代包
xlsx依赖rJava,在arm64 Mac上兼容性问题较多,推荐改用纯R实现的包:
- 基础读写操作:使用readxl(仅读取)和writexl(仅写入),无需Java支持,安装命令:
install.packages(c("readxl", "writexl"))
- 复杂Excel操作:使用openxlsx,功能覆盖
xlsx大部分场景,同样无需Java,安装命令:
install.packages("openxlsx")
方案2:修复rJava与arm64 Java的兼容性
如果必须使用xlsx,尝试以下步骤:
- 彻底卸载旧Java:
- 删除
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin - 删除
/Library/PreferencePanes/JavaControlPanel.prefPane - 执行
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk<版本号>.jdk(替换为实际安装的旧Java版本)
- 删除
- 安装arm64版本的JDK 8:
安装完成后设置环境变量,终端执行:
验证:echo 'export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_xxx.jdk/Contents/Home"' >> ~/.zshrc echo 'export PATH="$JAVA_HOME/bin:$PATH"' >> ~/.zshrc source ~/.zshrcecho $JAVA_HOME应显示arm64 JDK路径,java -version需显示架构为aarch64 - 重新编译安装
rJava:
在RStudio中执行:
安装完成后先加载install.packages("rJava", type = "source")rJava,再加载xlsx:library(rJava) library(xlsx)
方案3:使用Rosetta 2兼容模式
如果上述方案无效,可切换RStudio为x86_64模式:
- 找到应用程序中的RStudio,右键选择「显示简介」,勾选「使用Rosetta打开」
- 安装x86_64版本的JDK 8,并设置对应的环境变量
- 重新安装
rJava和xlsx包
内容的提问来源于stack exchange,提问作者Yunna Lin
相关产品推荐
相关产品推荐

