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

时间:2015-02-11 18:58:22

标签: java r ubuntu rjava ubuntu-14.10

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

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 

但那不起作用,还有什么我可以做的吗?我将提供任何所需的详细信息

9 个答案:

答案 0 :(得分:19)

当我尝试在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 :(得分:16)

要解决这个问题,

  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 server restart

答案 2 :(得分:7)

如果上述情况均无效,请尝试此操作,稍后再次感谢我(通用答案):)

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

答案 3 :(得分: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从源代码编译它。

答案 4 :(得分:2)

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

步骤:

  1. 找到您的R位置。它将存储在rsession-ld-library-path rserver.conf文件中。或者只是做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服务器

答案 5 :(得分: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}

答案 6 :(得分:0)

通过{p>检查$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软件包。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

问题: 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

我们仅将上述@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 终端中检查了与 LD_LIBRARY_PATH 关联的 3.6.0,如下所示:

Sys.getenv("LD_LIBRARY_PATH")

O/P

[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"