无法在 OSX 上使用 JRI 加载 libR.dylib
Cannot load libR.dylib with JRI on OSX
我有一个自定义编译的 R 安装。我必须自定义编译它才能使用 MKL。
在我的 build.sbt
中有以下行
javaOptions += "-Djava.library.path=/Users/me/R-3.3.2/lib:/Users/taylor/Library/R/3.3/library/rJava/jri
还有:
fork := true
所以 javaOptions
工作正常。
为了测试这一点,我启动 sbt
并尝试用 System.loadLibrary("jri")
加载 jri
。我收到以下错误:
java.lang.UnsatisifiedLinkError: /Users/me/R/3.3/library/rJava/jri/libjri.jnilib: dlopen(/Users/me/Library/R/3.3/library/rJava/jri/libjri.jnilib, 1): Library not loaded libR.dylib
所以我去看看otool
它期望什么-
otool -L libjri.jnilib
in /Users/me/Library/R/3.3/library/rJava/jri
里面有以下内容:(余数省略)
libjri.jnilib
libjri.jnilib (compatibility version 0.0.0, current version 0.0.0)
...
libR.dylib (compatibility version 3.3.0, current version 3.3.2)
...
我觉得这看起来很有趣,所以我将 libR.dylib
从 /Users/me/R-3.3.2/lib
复制到 /Users/me/Library/R/3.3/library/rJava/jri
中,看看它是否只是在本地环顾四周。
不幸的是,我仍然遇到同样的错误。
我完全不知道我需要做什么才能完成这项工作,这让我的整个项目停滞不前。有没有人经历过并修复它?
首先,请注意,您无需重新编译 R 即可使用 MKL,因为 CRAN OS X 二进制文件是有意提供的,因此您可以将 libRblas.dylib
指向任何兼容的 BLAS 实现 - 考虑阅读 R 文档。
至于错误,您似乎编译了没有框架支持的R and/or 没有安装它,因此libR
不包含完整路径。此外,您可能没有使用推荐的方式来启动您的 Java 应用程序使用 R CMD
。您可以使用
install_name_tool -id <libR> <libR>
手动修复 libR
(其中 <libR>
是 libR.dylib
的完整路径),或者您可以使用
install_name_tool -change libR.dylib <libR> \
/Users/me/Library/R/3.3/library/rJava/jri/libjri.jnilib
强制libjri
获取您在libR
的位置。还有其他方法,例如在开始 Java 之前设置 DYLD_...
env vars 或使用 R CMD
.
我有一个自定义编译的 R 安装。我必须自定义编译它才能使用 MKL。
在我的 build.sbt
中有以下行
javaOptions += "-Djava.library.path=/Users/me/R-3.3.2/lib:/Users/taylor/Library/R/3.3/library/rJava/jri
还有:
fork := true
所以 javaOptions
工作正常。
为了测试这一点,我启动 sbt
并尝试用 System.loadLibrary("jri")
加载 jri
。我收到以下错误:
java.lang.UnsatisifiedLinkError: /Users/me/R/3.3/library/rJava/jri/libjri.jnilib: dlopen(/Users/me/Library/R/3.3/library/rJava/jri/libjri.jnilib, 1): Library not loaded libR.dylib
所以我去看看otool
它期望什么-
otool -L libjri.jnilib
in /Users/me/Library/R/3.3/library/rJava/jri
里面有以下内容:(余数省略)
libjri.jnilib
libjri.jnilib (compatibility version 0.0.0, current version 0.0.0)
...
libR.dylib (compatibility version 3.3.0, current version 3.3.2)
...
我觉得这看起来很有趣,所以我将 libR.dylib
从 /Users/me/R-3.3.2/lib
复制到 /Users/me/Library/R/3.3/library/rJava/jri
中,看看它是否只是在本地环顾四周。
不幸的是,我仍然遇到同样的错误。
我完全不知道我需要做什么才能完成这项工作,这让我的整个项目停滞不前。有没有人经历过并修复它?
首先,请注意,您无需重新编译 R 即可使用 MKL,因为 CRAN OS X 二进制文件是有意提供的,因此您可以将 libRblas.dylib
指向任何兼容的 BLAS 实现 - 考虑阅读 R 文档。
至于错误,您似乎编译了没有框架支持的R and/or 没有安装它,因此libR
不包含完整路径。此外,您可能没有使用推荐的方式来启动您的 Java 应用程序使用 R CMD
。您可以使用
install_name_tool -id <libR> <libR>
手动修复 libR
(其中 <libR>
是 libR.dylib
的完整路径),或者您可以使用
install_name_tool -change libR.dylib <libR> \
/Users/me/Library/R/3.3/library/rJava/jri/libjri.jnilib
强制libjri
获取您在libR
的位置。还有其他方法,例如在开始 Java 之前设置 DYLD_...
env vars 或使用 R CMD
.