私は最近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をインストールすると問題が起きる可能性があることも心配しています。
この問題を診断し解決する方法について何かアイデアがありますか?
私は同じ問題を抱えていて、あなたと同じステップを経た。 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
フラグが追加されました
OSX El Capitan 10.11では、ユーザーは/ usr/libに書き込む権限を持っていません。代わりに、次のコマンドを使用してください。
Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
次のように実行して、libjvm.dylibを明示的にロードできます
dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)
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/
以下のコマンドが機能します。
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で正しく動作するように設定した方法です:
ターミナルウィンドウで次のコマンドを発行して「rJava」をアンインストールします。
Rscript -e 'remove.packages("rJava")'
Sudo Rscript -e 'remove.packages("rJava")'
OracleからJavaソフトウェアをダウンロードしてインストールします。 https://www.Java.com/en/download/mac_download.jsp
お気に入りのエディタを使用して、以下の行を/Users/<userid>/.bashrc
に追加します。
# Set Java_HOME so rJava package can find it
export Java_HOME=$(/usr/libexec/Java_home -v 1.8)/jre
(.bashrc
への変更を反映するために)ターミナル、R、およびRStudioウィンドウをすべて閉じて再起動します。
ターミナルウィンドウで次のコマンドを実行します。
Sudo ln -sf $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
ターミナルウィンドウで次のコマンドを実行します。
Sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
rJavaを再コンパイルしたり、共有ライブラリをR frameworksライブラリディレクトリにリンクして追加の手順を実行したりしなくても、CRAN rJavaを使用できるはずです。
Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries
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 /ヘッダ
簡単な手順は次のとおりです。
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)
見つけることができるすべてのトラブルシューティングを行ってから、jdk-11.0.1_osx-x64_bin.dmgを次からインストールしました: Oracle downloads
その後、すべてが完全に機能しました。
Library( 'rJava')の実行時にロードされなかったライブラリのバージョンを確認し、インストールする必要のあるJavaバージョンと一致させます。
ここで私はMACで働いていました:
~/.profile
または~/.bashrc
に次の行を追加してください:%export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
1.1 % source .profile
(または% source .bashrc
)
% Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
remove.packages(rJava)
remove.packages(Rweka)
%Sudo R CMD javareconf
install.packages("rJava", dependencies = TRUE, type = "source")
install.packages("rJava", dependencies = TRUE, type = "source")
library("rJava", "RWeka")
をロードする頑張ってください。
あなたのファイルシステムに触れない別の簡単な答えかもしれません:
$ 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パスに置き換えてください。)
以下のこの行は、私がrJava
パッケージで抱えていたのと同じ問題を、この議論の他の人と同じように解決しました。この問題には複数の解決策があると私は確信していますし、時には以下のような1行でゴミを捨てるのに多くの時間を節約できるので、彼らの貢献に対して心から感謝します。
Sudo ln -s $(/usr/libexec/Java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
ここで、El Capitan用のレガシーJavaバージョン6をダウンロードできます。 https://support.Apple.com/kb/DL1572?viewlocale=en_US&locale=en_US そうすると、rJavaパッケージが私のために機能します。
コマンドラインで次のコマンドを実行します。Sudo R CMD javareconf
上記のいくつかの解決策はこれを述べていますが、彼らはまた1つがrJava
パッケージを削除してその後再インストールすることを提案します。これらの追加手順は不要であることがわかりました。