7

当我想加载 rJava 时出现错误。JDK 已安装。(我在 CentOS 虚拟机上运行 R(cloudera demo vm cdh3u4))

> library(rJava)

Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error: unable to load shared object '/home/cloudera/R/x86_64-redhat-linux-gnu-library/2.15/rJava/libs/rJava.so':
  libjvm.so: cannot open shared object file: No such file or directory
Error: package/namespace load failed for ‘rJava’

设置有问题LD_LIBRARY_PATH吗?如果是,我该如何解决?我需要运行 rJava 以便稍后安装 rhdfs。

更多信息(如果需要):

[cloudera@localhost ~]$ java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
4

2 回答 2

15

对于 Ubuntu,安装了 oracle-java (7/8)。它将在此位置 /usr/lib/jvm 并且需要 sudo 访问权限。

/etc/ld.so.conf.d/java.conf使用以下条目创建文件:

/usr/lib/jvm/java-8-oracle/jre/lib/amd64
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server

(将 java-8-oracle 替换为 java-7-oracle 或 java-7-openjdk-amd64,具体取决于您的 java 版本)

然后:

sudo ldconfig

重新启动 RStudio,然后安装 rJava 包。

于 2014-09-19T11:27:43.723 回答
12

让 rJava 工作在很大程度上取决于您的计算机配置。以下至少在Windows平台上工作。您可以尝试检查一下,这是否对您的平台也有帮助。

  1. 您必须对两者使用相同的32 位或 64 位版本:RJDK/JRE。这种混合永远不会起作用(至少对我来说)。
  2. 如果您使用 64 位版本,请确保不要将 JAVA_HOME 设置为环境变量。如果设置了这个变量,无论出于何种原因,rJava 都将无法工作。您可以使用以下命令检查您的 JAVA_HOME 是否设置在 R 中:

    Sys.getenv("JAVA_HOME")
    

如果您需要设置 JAVA_HOME (例如,您需要它用于 maven 或其他东西),您可以在加载 rJava 之前使用以下代码在您的 R-session 中停用它:

if (Sys.getenv("JAVA_HOME")!="")
  Sys.setenv(JAVA_HOME="")
library(rJava)

在大多数情况下,这应该可以解决问题。此外,这也将解决在带有 R 的 Win7 64 位上使用 rJava 包的问题。我借用了从R 中取消设置环境变量的想法: rJava package install failed

于 2013-04-14T11:43:16.973 回答