9

我在自己的服务器上运行 Rstudio。Java 安装了良好的 java_home 和 bin。已安装 R。rJava 已安装。

尝试执行命令:library("rJava")但遇到问题,请按照我对rootlibjvm.so执行的 Rstudio 建议执行操作。sudo R CMD javareconf

这是我的 javareconf 的输出:

Java interpreter : /home/scoremd/jdk1.7.0_03/jre/bin/java
Java version : 1.7.0_03
Java home path : /home/scoremd/jdk1.7.0_03
Java compiler : /home/scoremd/jdk1.7.0_03/bin/javac
Java headers gen.: /home/scoremd/jdk1.7.0_03/bin/javah
Java archive tool: /home/scoremd/jdk1.7.0_03/bin/jar
NOTE: Your JVM has a bogus java.library.path system property!

Trying a heuristic via sun.boot.library.path to find jvm library...
Java library path: $(JAVA_HOME)/jre/lib/amd64:$(JAVA_HOME)/jre/lib/amd64/server
JNI linker flags : -L$(JAVA_HOME)/jre/lib/amd64 -L$(JAVA_HOME)/jre/lib/amd64/server -ljvm
JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux

似乎找到 java 库路径存在问题......但我的 java 工作正常,R 也一样。

我没有从 RStudio 支持和社区收到任何解决方案(告诉我在 SO .... 中提问)。

4

2 回答 2

2

我的 Centos 服务器上安装了 rstudio-server。有几个用户使用 rstudio,我们决定将 R 从 3.6 升级到 4.0。

升级后:

  • 所有用户都在运行 R 4.0。
  • 没有用户可以使用 install.package('rJava') 安装 rJava。这个错误总是弹出

配置:错误:无法编译简单的 JNI 程序。有关详细信息,请参阅 config.log。确保您已在 R 中安装并正确注册了 Java Development Kit。如果有疑问,请以 root 身份重新运行“R CMD javareconf”。错误:包“rJava”的配置失败</p>

  • 运行SUDO R CMD javareconf很顺利,而且当我以 root 身份打开 R 并继续尝试install.packages('rJava')时,它安装了包就好了。(我不知道,root 运行 R 3.6 和用户 4.0,请参阅下面的解决方案)
  • 但是,在 R studio 服务器中为用户安装包不起作用。总是说相同的“尝试运行 sudo R CMD javareconf”,就好像用户的 Java 路径错误一样。
  • 所以我们尝试将“JAVA_HOME”变量设置为安装 java jdk 的相同路径(通过在 yum 中搜索已安装的包找到)。那并没有解决它。

我的解决方案 我看到 root 正在运行 R 的 3.6 版,而所有用户都运行 4.0。这是因为我在另一个目录中安装了 4.0。R 4.0 的目录恰好是用户首先找到的。但是对于 root 用户...它首先找到 R 3.6 的路径。所以我在 root 用户的 $PATH 变量中设置了 4.0 文件夹的路径,这样就可以在找到 R 3.6 之前找到 4.0 版本

  • 回声 $PATH
  • 导出 PATH="/usr/local/bin:$PATH"
  • 回声 $PATH

然后我以该用户身份运行 R 并运行“R CMD javareconf”,安装了软件包,所有用户都很高兴并再次工作。

(免责声明,我不是经验丰富的 linux 管理员,运行不同的 R 版本可能有更好的解决方案)

于 2021-10-05T23:50:56.067 回答
0

自从我使用 以来已经有一段时间了rJava,它是在 Windows 上,但我有一些注释可以帮助你:

  • 确保 JRI 本机库位于 java.library.path 中列出的目录中
    • (也确认使用Process Explorer正在jri.dll加载)
  • jvm.dll当您执行此操作时,R 进程会加载library(rJava)

jvm.dll将我上面的笔记替换libjvm.so为您的情况,以及jri.dll与您相关的任何 .so 文件。

于 2013-12-25T03:03:18.960 回答