【问题标题】:Why does rJava not work on Ubuntu 14.04 using OpenJDK 7?为什么 rJava 不能在使用 OpenJDK 7 的 Ubuntu 14.04 上运行?
【发布时间】:2014-06-21 13:16:59
【问题描述】:

您好,我在使用 cran 的 rJava 包时遇到问题。

我已经安装了

sudo apt-get install openjdk-7-jdk
sudo apt-get install r-cran-rjava

跑了

sudo R CMD javareconf
# Java interpreter : /usr/bin/java
# Java version     : 1.7.0_55
# Java home path   : /usr/lib/jvm/java-7-openjdk-amd64/jre
# Java compiler    : /usr/bin/javac
# Java headers gen.: /usr/bin/javah
# Java archive tool: /usr/bin/jar

然后我尝试运行 R 并加载 rJava 并得到以下错误:

R
> library(rJava)
Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/usr/lib/R/site-library/rJava/libs/rJava.so':
  libjvm.so: cannot open shared object file: No such file or directory
Error: package or namespace load failed for ‘rJava’

我在 Ubuntu 14.04 64 位上使用 R 版本 3.1.0 (2014-04-10) -- “Spring Dance”

更新:实际上这不是特定于 OpenJDK,我只是尝试了 oracle java 8 并得到了相同的结果。我还发现了这个解决方法here,我不愿意使用它,因为它确实是一种解决方法,并没有真正解释为什么它是必要的。在我看来,包装系统应该已经处理了这个问题。似乎 libjvm.so 是问题所在,我把它放在这里

/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/jamvm/libjvm.so
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/libjvm.so
/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/libjvm.so

尽管使用 sudo R CMD javareconf 进行了更新,但由于某种原因 rJava 无法找到它们。

更新 2:情节变厚:如果我将 R 作为 sudo 运行,它可以工作。

感谢指点。

【问题讨论】:

标签: java r openjdk rjava ubuntu-14.04


【解决方案1】:

在 Ubuntu 上安装 rJava 包并不像大多数其他 R 包那么简单。关于如何做的一些快速说明(来源:https://www.r-bloggers.com/installing-rjava-on-ubuntu/)。

Install the Java Runtime Environment (JRE).

sudo apt-get install -y default-jre

Install the Java Development Kit (JDK).

sudo apt-get install -y default-jdk

Update where R expects to find various Java files.

sudo R CMD javareconf

Install the package.

> install.packages("rJava")

If you have a RStudio session open, then exit and restart it. This is important (a running RStudio session will not pick up these changes!).

【讨论】:

    【解决方案2】:

    我尝试了很多东西,但没有奏效。然后我尝试使用

    sudo rstudio
    

    然后

    install.packages('rJava')
    

    它的工作。很酷

    【讨论】:

    • 这对我有用,但在安装 rJava 之前,我必须在终端中执行“sudo R CMD javareconf”。
    【解决方案3】:

    你可以通过在超级用户中打开rstudio来解决这个问题

    sudo rstudio
    

    然后在 R 中运行

    install.packages('rJava')
    

    【讨论】:

    • 更简单的解决方案,它也对我有用。只有那个“type...”不是终端命令,所以应该采用不同的格式。谢谢。
    • 如果您使用 RStudio Server,则命令 sudo rstudio 不适用
    【解决方案4】:

    如果您使用的是 oracle java,请使用以下命令:

    sudo R CMD javareconf

    不会帮助使用:

    sudo R CMD javareconf **JAVA_HOME**=(path where java home is located)
    

    【讨论】:

      【解决方案5】:

      我在使用类似配置(R 3.1.0、Ubuntu 12.10、32 位)时遇到了同样的问题。我发现答案是正确设置 LD_LIBRARY_PATH,如下所述: error: unable to load installed packages just now 除了有问题的子目录是“客户端”而不是“服务器”。所以现在我正在这样设置我的环境:

      export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
      export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/i386:$JAVA_HOME/jre/lib/i386/client
      

      【讨论】:

      • 这确实解决了我一直遇到的问题。剩下的唯一问题是为什么 LD_LIBRARY_PATH 没有自动设置?但无论如何,就像我说的那样,这为我解决了问题。谢谢。
      • 在 ubuntu 服务器 14.04 export LD_LIBRARY_PATH=/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server 上为我工作
      【解决方案6】:

      我能够使用这个答案永久解决这个问题:https://stackoverflow.com/a/25932828/3939832

      如果您安装了 Oracle java 7 或 8,这将非常有用。在我的情况下,导出变量并不是一个永久的解决方案。您应该通过以下方式检查 R 使用的环境:

      Sys.getenv("JAVA_HOME")
      

      然后您可以通过创建java.conf 文件on /etc/ld.so.conf.d/ 来使用该环境,如上述答案链接中所述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-10
        相关资源
        最近更新 更多