2017-06-05 91 views
0

我最近更新R鍵3.4和RStudio其RStudio v1.0.143預覽,以便它與圖像更新的R &地塊兼容,而是試圖加載它還是需要它的包時,現在我在與rJava問題。這是如下:最近更新的R/RStudio,rJava無法加載。

Loading required package: rJava 
Error: package or namespace load failed for ‘rJava’: 
.onLoad failed in loadNamespace() for 'rJava', details: 
call: dyn.load(file, DLLpath = DLLpath, ...) 
    error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so': dlopen(/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib 
Referenced from: 
/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so 
    Reason: image not found 
Error: package ‘rJava’ could not be loaded 

我目前正在運行的MacOSX 10.12.4塞拉利昂

就如何解決這是偉大的知道的任何幫助。

+1

您可能需要從源代碼重新安裝它,請參閱R 3.4.0 NEWS文件。 –

+0

我已經重新安裝Java,還有什麼我會從源重新安裝? – Drew

+0

_rJava_包可能需要重新安裝,因爲R 3.4.0改變了如何解析.C()和.Fortran()調用。這是我指給你的NEWS文件。 –

回答

0

rJava,R,Java和MacOS的是一片混亂。

你可以做的是儘量從源頭上重建rJava。

確保重新配置Java。由於javareconf在涉及到macOS和JAVA方面做出了很多強有力的假設(其中之一是,無論何時您擁有「家」字,在JAVA_HOME變量中,它都會假設您要使用全系統Java - 不太好想法),您需要:

  • 在JDK中創建「人工」主頁,例如

    cd /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents ln -s Home RHome

  • 出口羅姆爲JAVA_HOME

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/RHome

運行帶開關的魯特,這將使海合會與JNI基於代碼編譯

`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/darwin"` 

下載rJava javareconf PA ckage並嘗試手動重建它(R之外)

https://cran.r-project.org/web/packages/rJava/index.html

> curl https://cran.r-project.org/src/contrib/rJava_0.9-8.tar.gz -o rJava_0.9-8.tar.gz 
> tar zxf rJava_0.9-8.tar.gz 
> cd rJava 
> ./configure 

如果通過,開始R(在您所設定的同一控制檯ENV)

> install.packages("rJava", type="source") 

注意與凌亂的Java安裝(Apple的JRE,甲骨文的JDK),您可能需要首先適當地設置Java env。這可能是你需要一些「髒」的黑客,你鏈接javac,javahjar從JRE內部的JDK。你會知道什麼時候你需要做一次./configure抱怨丟失的命令。

它也可能需要更新文件

`/usr/libexec/java_home`/../Info.plist 

,並確保您的JVM可以處理JNI。您需要更改:

<key>JVMCapabilities</key> 
<array> 
    <string>CommandLine</string> 
</array> 

<key>JVMCapabilities</key> 
<array> 
    <string>CommandLine</string> 
    <string>JNI</string> 
</array> 

經過一番掙扎後,你可能會得到它的工作的罰款。但是,這真的是系統依賴的。很大程度上取決於你有什麼版本的R,是否安裝了JDK,以及你的默認JVM是什麼。

注意!

rJava需要XQuartz編譯,請確保安裝它,以及

https://www.xquartz.org

0

正如已經@mko指出,MACOS/R/rJava的組合是一塌糊塗,雖然是一個非常有用的。我已經在每個版本的幾個版本上就這個問題進行過爭論,無論你多麼小心,它都會週期性地重新開始。也就是說,有幾件事要記住:

  • 您將需要JDK安裝,而不僅僅是一個JRE安裝。
  • 如果不使用已棄用的Apple 1.6版Apple版本,R的javareconf腳本不能正確處理libjvm.dylib的位置。
  • 最好使用最新的JDK版本以從最新的安全增強中受益。
  • R的javareconf腳本不能重新配置 R升級到新的Java版本後正確;它需要重新安裝R才能正確執行。

所以,牢記這些:

  • 安裝/升級JDK。
  • 這是正確設置JAVA_HOME無論哪個JDK安裝您打算使用(一般在的〜/ .bashrc〜/ .bash_profile中)一個好主意。
  • 如果尚未安裝,請安裝XQuartz(如@mko提及)。
  • (重新)安裝R(允許對新的Java安裝正確的R構型。
  • 運行javareconf具有自定義參數腳本讓它配置爲現代JDK。
  • 鏈接Java運行於R的庫文件夾,它可以發現它

自定義調用javareconf是短短几行的終端: 首先,按照要求確保JAVA_HOME設置:

# Make sure JAVA_HOME is set as required. 
export JAVA_HOME=${JAVA_HOME:-$(/usr/libexec/java_home)} 
# Obtain location of Java runtime library. 
export LIBJVM=$(find "${JAVA_HOME}" -name 'libjvm.dylib') 
# Reconfigure R using custom call to javareconf script. 
R CMD javareconf JAVA_LIBS="${LIBJVM}" JAVA_LD_LIBRARY_PATH="${LIBJVM}" JAVA_CPPFLAGS="'-I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin -I$(dirname "${LIBJVM}")'" 
# Link Java runtime to R library folder so it can be found. 
ln -fs "$LIBJVM" /Library/Frameworks/R.framework/Libraries 

現在你應該能夠啓動R並安裝rJava ok。

如果您使用用r的家釀安裝(需要與--with-java選項來安裝),使用該行的Java運行時,而不是鏈接:

ln -fs "$LIBJVM" "$(brew --prefix r)/lib" 

的過程需要在MacOS管理員權限(除非R通過自制軟件安裝)。 R包安裝程序爲各種文件提供管理權限,所以幸運的是不需要sudo。作爲參考,我最近也在這個問題上寫了一個簡短的article