【问题标题】:install rJava - "configure: error: One or more JNI types differ from the corresponding native type"安装 rJava -“配置:错误:一种或多种 JNI 类型与相应的本机类型不同”
【发布时间】:2013-09-03 01:07:53
【问题描述】:

我在 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,我下载了源码,放到我的home目录下,从源码编译了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 之外的任何内容的写访问权。

任何信息将不胜感激!

【问题讨论】:

  • 您好,我从本地服务器管理团队获得了帮助,我认为更新对我很有用。问题是当我构建 rJava 包时,它在服务器上的默认 Java 版本 (usr/lib) 和我在 /home 区域中安装的自定义版本之间感到困惑。后者由 .bashsrc 文件设置,该文件具有以下行:
    export JAVA_HOME=/home/me/jdk1.7.0_04/bin/java
    export PATH=$PATH:/home/me/jdk1.7.0 _04/bin 所以一旦我删除了这两行 rJava 就会正确安装。

标签: java r java-native-interface rjava


【解决方案1】:

我在 R 版本 3.0.2 中尝试install.packages("rJava") 时遇到了同样的问题,只要我尝试以普通用户(Linux、Debian)的身份安装。以 root 身份运行 install.packages("rJava") 没有问题。然后,尝试 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_HOMELD_LIBRARY_PATH~/.login(遵循Trouble in Setting Java Environment Path on Ubuntu (libjvm.so: cannot open shared object file: No such file or directory) 的说明):

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,然后设置您的环境变量,当然,在 R 中设置您自己的.libPaths() 以便找到 rJava。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢,这在 El Capitan 上对我有用。安装后,在加载我解决的包时出错: sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib 如this SO 问题。
    【解决方案3】:

    使用 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"
    

    然后

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

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

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

    【讨论】:

    • 自 2021 年起,这不再有效(在 64 位 Gentoo 上)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2021-10-12
    • 2020-09-18
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多