libjvm.so:无法打开共享对象文件:没有那个文件或目录。

34

尝试在我的14.10 Ubuntu上使用此代码安装rJava包:

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

我遇到了几个与Java相关的错误,包括JNI问题,在重新安装JDK之后,尝试再次运行相同的代码,仍然遇到了那个错误。

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 

但那并没有奏效,还有其他什么我可以做的吗?我会提供任何必要的细节。


是的,但我确实尝试过使用终端命令行和Rstudio命令行。 - tan
R版本3.5.3(2019-03-11),Rstudio版本1.2.1335。在我的情况下,只需退出Rstudio并重新启动即可。我没有重新定义LD_LIBRARY_PATH。 ~~~~ 1.运行sudo R CMD javareconf 2.安装我的软件包。 3.重新启动Rstudio。 - Nick Dong
10个回答

29

当我尝试在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")

1
这是唯一一个对我有效的版本。或者至少是我能够胜任的唯一答案! - Pete900
我不知道为什么,但这对我有效。 - cloudscomputes

28
为了解决这个问题,您需要执行以下操作:
  1. 运行以下命令:

    sudo R CMD javareconf

  2. 将以下内容添加到 /etc/environment 文件中。这样每次您的机器重启时,它将被设置为该值。

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

    (更改为您的路径)

  3. 运行以下命令:

    source /etc/environment

  4. 重新启动rstudio服务器

这个对我有效,而上面的那些不行。也许需要以 root 身份运行 R CMD javareconf - Sebastien Guyader

14

如果以上方法都不起作用,尝试这个方法,感谢我以后再说(通用回答):)

R CMD javareconf -e
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_LD_LIBRARY_PATH

4
抱歉,那个也不起作用。这个可以。 http://orinanobworld.blogspot.com/2016/12/rjava-gift-that-keeps-on-giving.html - user3673

3

请检查$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包。


2
  • 我通过每次打开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
当我尝试安装一个有Java依赖的Node.js插件时,遇到了这个问题。这个Node.js应用程序安装在Heroku环境中。有人有什么想法吗?如果有,请参考以下Stack Overflow链接:http://stackoverflow.com/questions/36191073/node-java-error-libjvm-so-cannot-open-shared-object-file-no-such-file-or-dire - J0NNY ZER0

2
如果有人现在来到这里,请尝试以下方法:
步骤:
1. 找到您的R位置。它将存储在rserver.conf文件中的rsession-ld-library-path中,或者只需执行which R。该位置通常为/usr/lib64/R/lib或/usr/lib64/microsoft-r/3.3/lib64/R/lib。
2. 找到libjvm.so文件,它通常位于usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server路径中,具体取决于您使用的jre。在$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
4. 重新启动R服务器

0

我们正在使用AZUL。我发现ZST没有被正确添加。添加了ZST之后,它就正常工作了。


0

好的,正如@user3673所指出的this,对我来说解决方案是更改/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}


0
我在Dockerfile中为rJava和xlsx修复了这个问题,通过搜索libjvm.so文件并将LD_LIBRARY_PATH设置为该目录:
RUN find / -name libjvm.so
ENV LD_LIBRARY_PATH=/usr/lib/jvm/java-11-openjdk-amd64/lib/server

0

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

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

原因:将Java版本从java-1.8.0-openjdk-1.8.0.262.b10-1.el7_9.x86_64更新为java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64导致的

在我的情况下,我们有两个版本的R。

  1. 3.6.0
  2. 3.6.2

我们只针对Rstudio-server-pro应用程序的默认版本3.6.2应用了上述@minhas23解决方案。

但是当我们选择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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接