2017-01-30 1 views
1

Ich habe eine benutzerdefinierte kompilierte R-Installation. Ich musste es kompilieren, um MKL zu verwenden.Kann libR.dylib nicht mit JRI unter OSX laden

In meinem build.sbt Ich habe die folgende Zeile

javaOptions += "-Djava.library.path=/Users/me/R-3.3.2/lib:/Users/taylor/Library/R/3.3/library/rJava/jri

und auch:

fork := true so javaOptions funktioniert richtig.

Um dies zu testen, feuere ich sbt und versuchen, jri mit System.loadLibrary("jri") zu laden. Ich erhalte die folgende Fehlermeldung:

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

Also ging ich mit otool zu sehen, was sie erwartet -

otool -L libjri.jnilib in /Users/me/Library/R/3.3/library/rJava/jri hat folgendes drin: (Rest entfällt)

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) 
    ... 

Ich fand das lustig, also kopierte ich libR.dylib von /Users/me/R-3.3.2/lib in /Users/me/Library/R/3.3/library/rJava/jri, um zu sehen, ob es sich nur lokal umgesehen hat.

Leider bekomme ich immer noch den gleichen Fehler.

Ich habe keinen vollständigen Überblick darüber, was ich tun muss, damit dies funktioniert, und es hat mein gesamtes Projekt zum Erliegen gebracht. Hat jemand das erlebt und behoben?

Antwort

0

Beachten Sie, dass Sie R für die Verwendung von MKL nicht erneut kompilieren müssen, da die CRAN OS X-Binärdateien absichtlich so ausgeliefert werden, dass Sie auf eine kompatible BLAS-Implementierung verweisen können .

Wie für den Fehler scheint es, dass Sie R ohne Framework-Unterstützung kompiliert haben und/oder es nicht installiert haben, daher enthält libR nicht den vollständigen Pfad. Außerdem haben Sie wahrscheinlich nicht die empfohlene Methode zum Starten Ihrer Java-Anwendung R CMD verwendet. Sie können entweder

install_name_tool -id <libR> <libR> 

Ihre libR manuell zu beheben (wobei <libR> den vollständigen Pfad zu Ihrem libR.dylib ist), oder Sie können

install_name_tool -change libR.dylib <libR> \ 
    /Users/me/Library/R/3.3/library/rJava/jri/libjri.jnilib 

zu zwingen libjri verwenden, um Sie Standort von libR abholen. Es gibt auch andere Möglichkeiten, wie zum Beispiel die Einstellung DYLD_... env vars, bevor Sie Java starten oder R CMD verwenden.

Verwandte Themen