web-dev-qa-db-ja.com

OSX Yosemiteに「アップグレード」した後のRStudio / RでのrJavaロードエラー

私は最近OSX Mountain LionからYosemiteへ、そしてR 3.1.3から3.2へ "アップグレード"しました。アップグレード直後、RまたはRStudioを開いたときに、Java 6をインストールする必要があるというポップアップメッセージが表示されました。さらに、rJavaまたはrJavaに依存するパッケージ(xlsxなど)をロードするとRStudioがクラッシュしました。 R.appを直接開いてこれを試したときにもクラッシュしました。

Stack Overflowなどでいくつかの修正を試みた後(詳細は下記)、rJavaまたはrJavaに依存するパッケージをロードしてもRがクラッシュすることはなくなりましたが、次のエラーが発生します。

library(rJava)
Error : .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.2/Resources/library/rJava/libs/rJava.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.2/Resources/library/rJava/libs/rJava.so
  Reason: image not found
Error: package or namespace load failed for ‘rJava’

しかし、コマンドラインからRを起動してからrJavaまたはrJavaに依存するパッケージをロードすると、うまくいくようです(少なくともエラーメッセージは表示されません)。

私はいくつかの試みた修正をいくつか試してみましたが、そのうちのいくつかは何度か試してみましたが、何をしたのか正確に思い出せませんでした。しかし、これがその要点です。

  • 私の.bash_profileに以下を追加しました(per this SO answer ):

    export Java_HOME = "/ usr/libexec/Java_home -v 1.8"
    export LD_LIBRARY_PATH = $ Java_HOME/jre/lib/server

  • 次のようにコマンドラインからJavaを再設定しました。

    Sudo R CMD javareconf -n

  • options("Java.home")をチェックし、これがNULLに設定されていることを発見しました。次のように設定してみました( this SO question ):

    オプション( "Java.home" = "/ライブラリ/ Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre")

  • 最新のJava Development Kitをインストールし、ソースからrJavaを再インストールしました(それが見つかった場所を思い出せません)。

これらすべてを試しているうちに、RをクラッシュさせずにrJavaをロードすることができましたが、代わりに上記のエラーメッセージが表示されました。また、RStudioを終了すると、正常に終了したように見えますが、 "RStudioが突然終了しました"というメッセージが表示され、終了しようとしたときにプログラムがクラッシュしたことを示します。

私はオプションを使い果たしているように見えたので、私はついに OS X 2014-001用のJava (Java 6)をインストールすることにしました。さて、私がRまたはRStudioを開くと、「このソフトウェアにはJava 6が必要です」というポップアップメッセージは表示されなくなりました。しかし、私はまだ上に投稿された.onLoad failed in loadNamespace() for 'rJava'エラーメッセージを得ていました。

私がすでに見たいくつかの記事を見てみると、私は 別のSO answer を見逃していたことに気づいた。 Javaへの正しいパスをRStudioにします。

LD_LIBRARY_PATH = $(/ usr/libexec/Javaホーム)/ jre/lib/server:open -a RStudio

それによってRStudioウィンドウが開き、私はエラーを発生させることなくrJavaとそれに依存するパッケージをロードすることもできました。

最後に、コマンドラインからRを実行してみました(これまで行ったことはありません)。コマンドラインでrJavaまたはrJavaに依存しているパッケージをロードしても機能し、エラーは発生しません。

そのため、RStudioにJavaパスを与えるコードを使用してコマンドラインからRStudioを開くと、rJavaを機能させることができます(上記のとおり)。しかし、私は根本的な問題を解決する方法を見つけたいと思います。そうすれば、RStudioを通常のMacの方法で開くことができ、コマンドラインを整理する必要はありません。私はまた、古いバージョンのJavaをインストールすると問題が起きる可能性があることも心配しています。

この問題を診断し解決する方法について何かアイデアがありますか?

113
eipi10

私は同じ問題を抱えていて、あなたと同じステップを経た。 Finder/Spotlightを介してRStudioを起動するための最後のステップは、libjvm.dylibを/ usr/local/libにリンクすることでした。

Sudo ln -f -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

既存のファイル/リンクを強制的に上書きするために-fフラグが追加されました

273
Alex Popov

OSX El Capitan 10.11では、ユーザーは/ usr/libに書き込む権限を持っていません。代わりに、次のコマンドを使用してください。

Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
52
lalas

次のように実行して、libjvm.dylibを明示的にロードできます

dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)
28
yuan

MacOS High Sierra(10.13.1)とJavaバージョン9では、わずかに異なるJVMパスを使用する必要があります(以前のJavaバージョンの説明と比較して、パスにjreフォルダーがないことに注意してください)。

Sudo ln -f -s $(/usr/libexec/Java_home)/lib/server/libjvm.dylib /usr/local/lib

JVMについてRに通知する必要があります。

MY_R_VERSION=$(Rscript -e "cat(with(R.version, sprintf('%s.%s', major, substring(minor, 1, 1))))")
ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/$MY_R_VERSION/Resources/lib/
25
Endre

以下のコマンドが機能します。

Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

その後、RStudioでは、rJavaのロードは "xlsx"パッケージのロードを通じて機能します。

library("xlsx")

P.S #1環境:Mac OS X El Capitan 10.11.3以降+ RStudio 0.99.491以降およびR 3.2.3以降。 (私は今これをmacOS Sierra(10.12)とR.3.3.1でもテストしました。)

P.S #2 openxlsxははるかに高速で動作するのにJavaに依存していないことがわかりましたので、現在そのパッケージを使用しています。それが他人を助けることを願っています。

これが私がMac OS X El Capitan(10.11.6)を実行している2台のMacで正しく動作するように設定した方法です:

  1. ターミナルウィンドウで次のコマンドを発行して「rJava」をアンインストールします。

    Rscript -e 'remove.packages("rJava")'
    Sudo Rscript -e 'remove.packages("rJava")'
    
  2. OracleからJavaソフトウェアをダウンロードしてインストールします。 https://www.Java.com/en/download/mac_download.jsp

  3. お気に入りのエディタを使用して、以下の行を/Users/<userid>/.bashrcに追加します。

    # Set Java_HOME so rJava package can find it
    export Java_HOME=$(/usr/libexec/Java_home -v 1.8)/jre
    
  4. .bashrcへの変更を反映するために)ターミナル、R、およびRStudioウィンドウをすべて閉じて再起動します。

  5. ターミナルウィンドウで次のコマンドを実行します。

    Sudo ln -sf $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
    
  6. ターミナルウィンドウで次のコマンドを実行します。

    Sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
    
6

rJavaを再コンパイルしたり、共有ライブラリをR frameworksライブラリディレクトリにリンクして追加の手順を実行したりしなくても、CRAN rJavaを使用できるはずです。

Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries
5
Jim

Image not found問題は、最新のJava SE 10 JDKを使用したOSX High Sierraへの新規インストールに存在します。

私はrJava Githubの問題のページで見つかった修正を使用してrJavaでパスの問題を解決することができました: https://github.com/s-u/rJava/issues/78

R CMD javareconf Java_CPPFLAGS = -I /システム/ライブラリ/ Frameworks/JavaVM.framework /ヘッダ

3
Galen

簡単な手順は次のとおりです。

  1. rJavaパッケージを削除します。remove.packages(rJava)
  2. クローザー
  3. 最新のJavaをあなたのMacにインストールしてください
  4. 端末を開いて次のコマンドを入力してください:Sudo R CMD javareconf
  5. Rを開き、次のコマンドでrJavaをインストールします。

    install.packages( "rJava"、依存関係= TRUE、タイプ= "source")

Libjvm.dylibファイルの場所を確認してください。

これを試してみてください。私の場合はこれでうまくいきました。

dyn.load('/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/lib/server/libjvm.dylib')
library(rJava)
1
Sagar Neel De

見つけることができるすべてのトラブルシューティングを行ってから、jdk-11.0.1_osx-x64_bin.dmgを次からインストールしました: Oracle downloads

その後、すべてが完全に機能しました。

Library( 'rJava')の実行時にロードされなかったライブラリのバージョンを確認し、インストールする必要のあるJavaバージョンと一致させます。

1
user2428818

ここで私はMACで働いていました:

  1. ~/.profileまたは~/.bashrcに次の行を追加してください:%export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile(または% source .bashrc

  2. % Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  3. remove.packages(rJava)
  4. remove.packages(Rweka)
  5. 端末からこのコマンドを入力してください:%Sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. あなたのlibrary("rJava", "RWeka")をロードする

頑張ってください。

1
Nasser

あなたのファイルシステムに触れない別の簡単な答えかもしれません:

$ install_name_tool -add_rpath /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so

jdk1.8.0_131.jdkをJDKパスに置き換えてください。)

1
mokjpn

以下のこの行は、私がrJavaパッケージで抱えていたのと同じ問題を、この議論の他の人と同じように解決しました。この問題には複数の解決策があると私は確信していますし、時には以下のような1行でゴミを捨てるのに多くの時間を節約できるので、彼らの貢献に対して心から感謝します。

Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
0
Süleyman

ここで、El Capitan用のレガシーJavaバージョン6をダウンロードできます。 https://support.Apple.com/kb/DL1572?viewlocale=en_US&locale=en_US そうすると、rJavaパッケージが私のために機能します。

0
ignazw

コマンドラインで次のコマンドを実行します。Sudo R CMD javareconf

上記のいくつかの解決策はこれを述べていますが、彼らはまた1つがrJavaパッケージを削除してその後再インストールすることを提案します。これらの追加手順は不要であることがわかりました。

0
Megatron