繁体   English   中英

libjvm.so:无法打开共享 object 文件:没有这样的文件或目录

[英]libjvm.so: cannot open shared object file: No such file or directory

尝试使用此代码在我的 14.10 ubuntu 上的 R 上安装 rJava package

if (!require(rJava)) install.packages('rJava')

在重新安装 jdk 后,出现与 java 相关的一些错误,包括 jni 问题,并尝试再次运行相同的代码,得到了那个错误

Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/usr/local/lib/R/site-library/rJava/libs/rJava.so':
  libjvm.so: cannot open shared object file: No such file or directory
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/usr/local/lib/R/site-library/rJava’
Warning in install.packages :
  installation of package ‘rJava’ had non-zero exit status

The downloaded source packages are in
    ‘/tmp/RtmpfFjrp0/downloaded_packages’
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called ‘rJava’

寻找解决方案,找到几乎所有建议(对于 x64)执行这些命令的人

export LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/lib/amd64:/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server
sudo R CMD javareconf 

但这没有用,我还能做些什么吗? 我会提供任何需要的细节

为了解决这个问题,

  1. 须藤 R CMD javareconf

  2. 将以下内容添加到 /etc/environment. 这将在您的机器每次重新启动时设置。

    LD_LIBRARY_PATH=/usr/lib/jvm/default-java/jre/lib/amd64/server/

    (更改为您的路径)

  3. 运行以下命令:

    源 /etc/environment

  4. rstudio 服务器重启

当我尝试在 RStudio 中加载 rJava 时,我遇到了同样的错误。 以下解决方案对我有用

1) sudo rstudio-server stop
2) export LD_LIBRARY_PATH=/usr/lib/jvm/jre/lib/amd64:/usr/lib/jvm/jre/lib/amd64/default
3) sudo rstudio-server start

执行上述步骤后,我能够在 RStudio 中成功运行以下内容

> library("DBI")
> library("rJava")
> library("RJDBC")

如果上述方法均无效,请尝试此操作并稍后感谢我(通用答案):)

R CMD javareconf -e
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_LD_LIBRARY_PATH
  • 每次我想打开 RStudio 时,我都通过运行以下命令解决了类似的问题。 转到包含 rstudio 可执行文件的文件夹,打开终端并键入:

    LD_LIBRARY_PATH=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/server: open -a rstudio

    当然,您必须根据您的 Java 版本更改路径。

  • 如果之前的解决方案不起作用,请尝试阅读这篇文章:http ://allanino.me/blog/programming/installing-some-r-packages/

  • 如果此解决方案也不起作用,那么您最后的机会是安装rJava并从源代码编译它。

如果现在有人来这里,请尝试以下方法:

脚步:

  1. 找到您的 R 位置。 它将存储在rserver.conf文件中的rsession-ld-library-path中。 或者只是通过执行which R 位置通常是/usr/lib64/R/lib/usr/lib64/microsoft-r/3.3/lib64/R/lib

  2. 根据您使用的 jre,找到通常位于usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server路径中的libjvm.so文件。 签入 $JAVA_HOME 环境。

  3. 使用ln -s sudo ln -s /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so /usr/lib64/microsoft-r/3.3/lib64/R/lib/libjvm.so创建符号链接sudo ln -s /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so /usr/lib64/microsoft-r/3.3/lib64/R/lib/libjvm.so

  4. 重启 R 服务器

检查$JAVA_HOME指向正确的位置

echo $JAVA_HOME

我正在使用 openjdk,但是$JAVA_HOME指向一些不存在的 oracle-java 文件夹。

修复$JAVA_HOME运行

sudo R CMD javareconf

检查输出。 Java headers gen. 应该指向/usr/bin/javah 例如:

djhurio@Skyforger ~ $ sudo R CMD javareconf
Java interpreter : /usr/lib/jvm/default-java/bin/java
Java version     : 11.0.1
Java home path   : /usr/lib/jvm/default-java
Java compiler    : /usr/lib/jvm/default-java/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/lib/jvm/default-java/bin/jar

在此之后,我可以安装和加载rJava包。

那么,作为@ user3673指出这个,对我来说,解决办法是更改以下行/usr/lib/R/etc/ldpaths

: ${R_JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/lib/amd64/server}

通过这个:

: ${R_JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/jre/lib/amd64/server}

我们正在使用 AZUL。 我可以看到 ZST 没有正确添加。 添加ZST后,它工作正常。

如果我们有两个 R 版本在 Unix Box 上运行,请添加答案。

问题: libjvm.so:无法打开共享对象文件:没有这样的文件或目录

引起原因:将java版本从java-1.8.0-openjdk-1.8.0.262.b10-1.el7_9.x86_64java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64

就我而言,我们有两个版本的 R

  1. 3.6.0
  2. 3.6.2

我们仅将上述@minhas23 解决方案应用于 3.6.2,该解决方案设置为 Rstudio-server-pro 应用程序的默认 R 版本。

但是当我们选择 R 版本为 3.6.0 时,我们遇到了类似的错误,然后我们执行了以下步骤:

export R_VERSION=3.6.0

/opt/R/${R_VERSION}/bin/R --version

unlink /usr/local/bin/R

unlink /usr/local/bin/Rscript

ln -s /opt/R/${R_VERSION}/bin/R /usr/local/bin/R
ln -s /opt/R/${R_VERSION}/bin/Rscript /usr/local/bin/Rscript

rstudio-server stop
export LD_LIBRARY_PATH=/usr/lib/jvm/jre/lib/amd64/server
R CMD javareconf

我们已经在 R 终端中检查了与3.6.0相关的LD_LIBRARY_PATH如下:

Sys.getenv("LD_LIBRARY_PATH")

开/关

[1] "/opt/R/3.6.0/lib/R/lib:/usr/local/lib:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64/jre/lib/amd64/server:/usr/lib/jvm/jre/lib/amd64/server"

通过搜索 libjvm.so 文件并将 LD_LIBRARY_PATH 设置为该目录,我在 Dockerfile 中为 rJava 和 xlsx 修复了此问题:

RUN find / -name libjvm.so
ENV LD_LIBRARY_PATH=/usr/lib/jvm/java-11-openjdk-amd64/lib/server

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM