无法在 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.