use*_*980 5 linux redhat rhel jri rjava
我正在尝试在 RHEL6 (6.4) 上设置 R 和 Tomcat
我已经安装了R并且可以运行它。我已经安装了Tomcat 7并且可以托管文件file。我已将应用程序打包为 WAR 文件并使用 tomcat 进行部署。该应用程序在使用任何 R 组件之前在各个方面都运行良好。
这是它崩溃的地方,并出现以下错误,如 catalina.out 中所示:
Cannot find JRI native library!
Please make sure that the JRI native library is in a directory listed in java.li
brary.path.
java.lang.UnsatisfiedLinkError: /usr/local/lib64/R-2.15.3/library/rJava/jri/libj
ri.so: libR.so: cannot open shared object file: Too many levels of symbolic link
s
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1750)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1675)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at org.rosuda.JRI.Rengine.<clinit>(Rengine.java:19)
Run Code Online (Sandbox Code Playgroud)
我确实在 R 下安装了 rJava: install.packages("rJava") 它安装得很好,并且我在 R 的库文件夹中安装了 rJava。
我在/etc/profile中定义了以下内容:
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre
export R_HOME=/usr/local/lib64/R-2.15.3
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$R_HOME/bin
export PATH
export LD_LIBRARY_PATH=$R_HOME/lib/libR.so,$JAVA_HOME/lib/amd64/server/libjvm.so
Run Code Online (Sandbox Code Playgroud)
据我了解,应该为服务器上的所有用户全局设置 JAVA_HOME、R_HOME、PATH 和 LD_LIBRARY_PATH。我知道 Tomcat 在 root 下运行,并且我可以确认 root 能够通过“” echo $JAVA_HOME、“ echo $R_HOME”、“ echo $LD_LIBRARY_PATH”、“ echo $PATH”查看上面设置的所有上述路径
所以我不确定为什么它抱怨无法打开这些 .so 文件。
另外,当它崩溃时,它会关闭 Tomcat。
谢谢!
小智 2
要从 Java 使用 R,您需要安装 JRI。幸运的是,JRI 现在是 rJava 的一部分并随它一起安装。
JRI 将需要其自己的本机共享库,该库已随 rJava 一起安装。要找到随 rJava 安装的 JRI,请使用
system.file("jri",package="rJava")
Run Code Online (Sandbox Code Playgroud)
从 R [命令行] 内部。上面的命令会给你一个路径。你将能够找到
这就是 JRI 正在寻找的共享库。您可以将上面通过 JAVA_OPTS 检索到的路径指定为
-Djava.library.path=${path-retrieved-from-R}
Run Code Online (Sandbox Code Playgroud)
它将在 Tomcat 初始化时传递到 JVM 设置。
如果您使用多个库,请相应地对库路径 java 选项进行分组。