6

我在 R3.0.1 上安装 rJava 时遇到了这个问题:“配置:错误:一种或多种 JNI 类型与相应的本机类型不同”

下面附上详细的消息。我搜索了类似的问题,但我的问题有点棘手,许多建议的解决方案要么不起作用,要么我无法尝试,因为我正在使用一个我没有系统库写入权限的服务器。

操作系统:Linux 2.6.18-348.6.1.el5 #1 SMP Tue May 21 15:44:27 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux (通过键入“uname -a”给出的信息对不起我不太明白这个信息)

R:R3.0.1,我下载了源代码,放在我的主目录中,并从源代码构建了 R。

rJava:我运行了“install.packages("rJava")”,在安装过程中我得到了:

=========================
检查 R 中的 Java 支持...存在:
解释器:'/usr/bin/java'
归档器:'/usr /bin/jar'
编译器:'/usr/bin/javac'
头文件准备:'/usr/bin/javah'
cpp 标志:'-I/usr/lib/jvm/java-1.7.0-openjdk-1.7. 0.9.x86_64/jre/../include -
I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre/../include/linux'
java 库:'-L/usr /lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre/lib/amd64/se
rver -ljvm'
检查是否可以编译 JNI 程序...是
检查 JNI 数据类型...配置:错误:一种或多种 JNI 类型与
对应的本机类型不同。您可能需要使用非标准编译器标志或
一个不同的编译器来解决这个问题。
错误:包 'rJava' 的配置失败
* 删除 '/home/me/R-3.0.1/library/rJava'

====================================

由于我只能远程访问服务器,因此我没有对我的主目录 /home/me 之外的任何内容的写访问权。

任何信息将不胜感激!

4

3 回答 3

9

install.packages("rJava")只要我尝试以普通用户(Linux,Debian)身份安装,我在尝试 R 版本 3.0.2 时遇到了同样的问题。install.packages("rJava")以root身份运行没有问题。然后,尝试library(rJava)为 root 工作,但不适用于作为用户的我:

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

这个问题需要添加环境变量JAVA_HOME和(按照在 Ubuntu 上设置 Java 环境路径的问题中找到的说明LD_LIBRARY_PATHlibjvm.so:无法打开共享对象文件:没有这样的文件或目录)):~/.login

setenv JAVA_HOME /usr/lib/jvm/java-7-oracle/
setenv LD_LIBRARY_PATH $JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server

# For c-shell; for bash, it would have to be:
export JAVA_HOME=/usr/lib/jvm/java-7-oracle/
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server

因此,您必须让系统管理员为您安装 rJava,然后设置您的环境变量,当然,.libPaths()在 R 中设置您自己的变量,例如查找 rJava。

于 2014-01-26T22:15:01.603 回答
7

我在我的 mac OSx El Capitan 上遇到了同样的问题。我尝试使用“R CMD javareconf”更新 R 使用的 java 路径/环境,但没有任何效果。

最后,我看到当我运行“R CMD javareconf”时,我的 Java 库路径:在输出中是空的。通过进一步挖掘,我发现我的 JAVA_HOME 设置不正确,正如这里指出的那样https://stackoverflow.com/a/3311983。我不得不在 JAVA_HOME 路径中添加一个额外的 /jre。

于 2016-10-09T22:15:07.417 回答
2

使用 linux,特别是 64 位 Gentoo,我的解决方案是将以下行添加到/etc/env.d/20java-config

LD_LIBRARY_PATH="/etc/java-config-2/current-system-vm/jre/lib/amd64:/etc/java-config-2/current-system-vm/jre/lib/amd64/server"

然后

  • 运行环境更新
  • 源 /etc/profile
  • 启动rstudio(或者如果您使用 GUI 菜单,请注销并登录以加载环境)

上述更改需要由 root 进行,但随后将适用于使用同一系统的非 root 用户,在下次登录时。

基本上,rJava conf 测试找不到 libjvm.so,conftest 程序会编译但不会链接:)

于 2017-04-09T09:08:27.257 回答