无法编译JNI程序来安装rJava包

时间:2016-06-07 07:13:45

标签: java r java-native-interface redhat

我使用的是Red Hat 5,无法安装rJava Package

我运行了以下命令:

$ R CMD javareconf -e

我收到以下错误: -

  

尝试编译并链接JNI程序检测到的JNI cpp标志:

     

检测到JNI链接器标志:

     

gcc -m64 -std = gnu99 -I / usr / include / R -DNDEBUG -I / usr / local / include
  -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE = 2 -fexceptions -fstack-protector --param = ssp-buffer-size = 4 -m64 -mtune = generic -fpic -fPIC -c conftest.c - o conftest.o

     

conftest.c:1:17:致命错误:jni.h:没有这样的文件或目录

     

编译终止。

     

make:*** [conftest.o]错误1

     

无法编译JNI程序

java -version如下: -

java版“1.8.0_91”

Java(TM)SE运行时环境(版本1.8.0_91-b14)

Java HotSpot(TM)64位服务器VM(版本25.91-b14,混合mod

JAVA_HOME = /usr/java/jdk1.8.0_91/jre

任何人都可以帮我编译JNI程序

2 个答案:

答案 0 :(得分:0)

我在Ubuntu上遇到过类似的问题。确定您缺少的文件在哪里

find / -name jni.h 2> /dev/null

可能会像

一样
/usr/lib/jvm/java-8-openjdk-amd64/include

您可能也缺少jni_md.h,然后执行类似下面的操作,其中路径已针对上面确定的路径进行更正。

R CMD javareconf JAVA_CPPFLAGS="-I/usr/lib/jvm/java-8-openjdk-amd64/include -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux/"

答案 1 :(得分:0)

您需要使用JDK而不是JRE。 JDK包含JNI编译所需的库和头文件。

通常,您必须重新配置R并确保指向正确的Java安装。

看看这里:http://www.owsiak.org/?p=3671你可以在那里找到你必须采取的所有步骤的详细解释,以便让R正常使用Java。为macOS准备了解释,但它也适用于基于Linux的系统 - 几乎没有修改。

总结一下:

  1. 安装JDK
  2. 重新配置R

    sudo R CMD javareconf \
    JAVA_HOME=${JAVA_HOME} \
    JAVA=${JAVA_HOME/bin/java \
    JAVAC=${JAVA_HOME}/bin/javac \
    JAVAH=${JAVA_HOME}/bin/javah \
    JAR=${JAVA_HOME}/bin/jar \
    JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/jre/lib/server \
    JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux"
    
  3. 启动R并安装需要Java的软件包