R语言加载xlsx包失败,修复rJava后问题仍存求助
解决R语言xlsx包加载失败(rJava依赖问题)
错误信息
加载xlsx包时触发如下错误:
Error: package or namespace load failed for ‘xlsx’: .onLoad failed in loadNamespace() for 'rJava', details: call: dyn.load(file, DLLpath = DLLpath, ...) error: unable to load shared object '/home/gallo/asn/.conda/envs/scRNAseq/lib/R/library/rJava/libs/rJava.so': libjvm.so: cannot open shared object file: No such file or directory Traceback: 1. library(xlsx) 2. tryCatch({ . attr(package, "LibPath") <- which.lib.loc . ns <- loadNamespace(package, lib.loc) . env <- attachNamespace(ns, pos = pos, deps, exclude, include.only) . }, error = function(e) { . P <- if (!is.null(cc <- conditionCall(e))) . paste(" in", deparse(cc)[1L]) . else "" . msg <- gettextf("package or namespace load failed for %s%s:\n %s", . sQuote(package), P, conditionMessage(e)) . if (logical.return && !quietly) . message(paste("Error:", msg), domain = NA) . else stop(msg, call. = FALSE, domain = NA) . }) 3. tryCatchList(expr, classes, parentenv, handlers) 4. tryCatchOne(expr, names, parentenv, handlers[[1L]]) 5. value[[3L]](cond) 6. stop(msg, call. = FALSE, domain = NA)
已尝试操作
检查Java版本后,尝试重新安装rJava并设置路径,但问题未解决:
system("java -version") Sys.setenv(JAVA_HOME = "/home/gallo/asn/.conda/envs/scRNAseq/lib/R/library/rJava/libs/rJava.so") install.packages("rJava", type = "source") Sys.setenv(LD_LIBRARY_PATH "/home/gallo/asn/.conda/envs/scRNAseq/lib/R/library/rJava/libs/rJava.so") library(xlsx)
问题根源与解决步骤
核心错误是路径配置错误:JAVA_HOME需指向Java安装根目录,而非rJava的共享库文件;LD_LIBRARY_PATH要指向libjvm.so所在目录,而非rJava.so。
步骤1:定位Java安装路径与libjvm.so位置
- 终端执行以下命令获取Java安装根目录:
readlink -f $(which java) | sed "s:/bin/java::"
输出示例:/usr/lib/jvm/java-11-openjdk-amd64,此即为JAVA_HOME。
- 查找
libjvm.so所在目录:
find /usr/lib/jvm/ -name libjvm.so
输出示例:/usr/lib/jvm/java-11-openjdk-amd64/lib/server/libjvm.so,取目录部分/usr/lib/jvm/java-11-openjdk-amd64/lib/server/。
步骤2:在R中正确配置环境变量
激活scRNAseq conda环境后启动R,执行:
# 替换为你的Java安装根目录 Sys.setenv(JAVA_HOME = "/usr/lib/jvm/java-11-openjdk-amd64") # 替换为你的libjvm.so所在目录 Sys.setenv(LD_LIBRARY_PATH = "/usr/lib/jvm/java-11-openjdk-amd64/lib/server/")
步骤3:重装rJava并加载xlsx
# 卸载现有rJava remove.packages("rJava") # 从源码安装,指定JDK路径确保编译正常 install.packages("rJava", type = "source", configure.args = "--with-jdk=/usr/lib/jvm/java-11-openjdk-amd64") # 加载xlsx包 library(xlsx)
可选:永久配置环境变量
避免每次启动R重复设置,可在conda环境中添加自动生效的变量:
- 创建激活脚本目录:
mkdir -p /home/gallo/asn/.conda/envs/scRNAseq/etc/conda/activate.d
- 写入环境变量配置:
echo 'export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"' >> /home/gallo/asn/.conda/envs/scRNAseq/etc/conda/activate.d/env_vars.sh echo 'export LD_LIBRARY_PATH="/usr/lib/jvm/java-11-openjdk-amd64/lib/server/:$LD_LIBRARY_PATH"' >> /home/gallo/asn/.conda/envs/scRNAseq/etc/conda/activate.d/env_vars.sh
下次激活scRNAseq环境时,变量会自动加载。
内容的提问来源于stack exchange,提问作者ASN
相关产品推荐
相关产品推荐

