rJava memuat kesalahan di RStudio / R setelah "meningkatkan" ke OSX Yosemite

122

Saya baru-baru ini "meningkatkan" dari OSX Mountain Lion ke Yosemite dan dari R 3.1.3 ke 3.2. Segera setelah upgrade, ketika saya membuka R atau RStudio saya mendapat pesan pop-up yang mengatakan bahwa saya perlu menginstal Java 6. Selain itu, memuat rJavaatau paket apa pun yang bergantung pada rJava (misalnya, xlsx) menyebabkan RStudio crash (R juga crash ketika saya mencoba ini dengan membuka R.appsecara langsung).

Setelah mencoba beberapa perbaikan yang ditemukan di Stack Overflow dan di tempat lain (lebih detail di bawah), saya berada pada titik di mana memuat rJavaatau paket apa pun yang bergantung rJavatidak lagi menyebabkan R macet, tetapi menghasilkan kesalahan berikut:

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

Namun, jika saya memanggil R dari baris perintah dan kemudian memuat rJavaatau paket apa pun yang bergantung rJavapadanya, tampaknya berfungsi (atau setidaknya saya tidak mendapatkan pesan kesalahan).

Saya telah mencoba sejumlah perbaikan percobaan yang berbeda, beberapa di antaranya beberapa kali, dan tidak dapat mengingat dengan tepat apa yang saya lakukan dalam urutan apa (tidak menyadari ini akan menjadi seperti rawa dan tidak benar-benar melacak) , tapi inilah intinya:

  • Menambahkan yang berikut ke saya .bash_profile(per jawaban SO ini ):

    ekspor JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
    ekspor LD_LIBRARY_PATH = $ JAVA_HOME / jre / lib / server

  • Java dikonfigurasi ulang dari baris perintah sebagai berikut:

    sudo R CMD javareconf -n

  • Memeriksa options("java.home")dan menemukan ini disetel ke NULL. Saya mencoba mengaturnya ke yang berikut (per pertanyaan SO ini ):

    options ("java.home" = "/ Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / jre")

  • Menginstal Java Development Kit terbaru dan menginstal ulang rJavadari sumber (tidak dapat mengingat di mana saya menemukannya).

Pada titik tertentu ketika mencoba semua ini, saya dapat memuat rJavatanpa menabrak R, tetapi malah mendapat pesan kesalahan yang diposting di atas. Selain itu, ketika saya keluar dari RStudio, tampaknya akan menutup secara normal, tetapi kemudian pesan "RStudio berhenti tiba-tiba" akan muncul, menunjukkan bahwa program macet saat mencoba menutup.

Saya akhirnya memutuskan untuk menginstal Java untuk OS X 2014-001 (Java 6), karena sepertinya saya kehabisan pilihan. Sekarang, ketika saya membuka R atau RStudio, pesan pop-up "Perangkat lunak ini membutuhkan Java 6" tidak lagi muncul. Namun, saya masih mendapatkan .onLoad failed in loadNamespace() for 'rJava'pesan kesalahan yang diposting di atas.

Dalam meninjau beberapa posting yang sudah saya lihat, saya melihat jawaban SO lain yang saya lewatkan sebelumnya, yang merekomendasikan membuka RStudio dengan kode baris perintah berikut yang memberi RStudio jalur yang benar ke java:

LD_LIBRARY_PATH = $ (/ usr / libexec / java_home) / jre / lib / server: buka -a RStudio

Itu membuka jendela RStudio dan saya juga dapat memuat rJavadan paket yang bergantung padanya tanpa mendapatkan kesalahan.

Terakhir, saya mencoba menjalankan R dari baris perintah (yang belum pernah saya lakukan sebelumnya). Ternyata pada baris perintah, memuat rJavaatau paket apa pun yang bergantung pada rJavapekerjaan dan tidak menimbulkan kesalahan apa pun.

Jadi, sekarang saya bisa mulai rJavabekerja jika saya membuka RStudio dari baris perintah dengan kode yang memberikan RStudio jalur java (seperti disebutkan di atas). Namun, saya ingin menemukan cara untuk memperbaiki masalah yang mendasarinya, apa pun itu, sehingga RStudio dapat dibuka dengan cara Mac biasa, tanpa memerlukan baris perintah kludge. Saya juga khawatir bahwa menginstal Java versi lama dapat menyebabkan masalah di masa mendatang.

Adakah yang punya ide tentang cara mendiagnosis dan menyelesaikan masalah ini?

eipi10
sumber
Apakah solusi ini masih berfungsi untuk Anda di El Capitan? Saya mendapatkan ini berfungsi sebelum menggunakan LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudiotrik, tetapi itu tidak berfungsi lagi. Saya telah menulis entri blog tentang masalah ini dan menjelaskan masalah ini di sana. Saya ingin tahu apakah orang lain mengalami masalah ini juga dalam konfigurasi ini atau apakah itu kesalahan saya.
Paul Klemm
Saya masih menggunakan Yosemite, jadi saya tidak yakin. Lihat di bawah untuk jawaban yang terkait dengan El Capitan.
eipi10
Oke, saya rasa saya akan memposting pertanyaan baru. Ya El Capitansolusi di bawah ini adalah membantu segera setelah RStudiobeban rJavaseperti yang diharapkan.
Paul Klemm
2
Ini berhasil setelah saya memulai ulang RStudio
Pranay Aryal
Saat mendiagnosis, coba otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so dapatkan daftar pustaka bersama dan cara menyelesaikannya. Saya tidak yakin bagaimana menemukan konten runtime @rpath.
Dave X

Jawaban:

279

Saya memiliki masalah yang sama dan melakukan langkah yang sama dengan Anda. Langkah terakhir untuk memungkinkan memulai RStudio melalui Finder / Spotlight adalah menautkan libjvm.dylib ke / usr / local / lib:

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

-f bendera ditambahkan untuk memaksa menimpa file / tautan yang ada

Alex Popov
sumber
4
Berfungsi untuk memperbaiki masalah yang sama ketika peningkatan dari El Capitan ke Sierra selesai. +1
Murta
2
Ini memecahkan banyak masalah; terutama jika kesalahan asli berasal dari cannot jfindclass[[1]]yang mungkin berasal dari rJava dan driver JDBC
Jenks
1
Saya harus menjalankan perintah ini setiap kali saya memperbarui Java di Macbook Pro saya. Ini masih berfungsi pada macOS Sierra 10.12.5 dan Java Version 8 Update 141.
thiagoveloso
11
Ini hampir berhasil bagi saya. Selain itu saya harus menambahkan symlink dalam kerangka R ke /usr/local/lib/libjvm.dylibfile, karena / usr / local / lib / sepertinya tidak ada di @rpath. Misalnya:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X
1
Ini bisa menjadi github.com/snowflakedb/dplyr-snowflakedb/wiki/… yang
pengguna2079550
53

Di OSX El Capitan 10.11, pengguna tidak memiliki izin untuk menulis ke / usr / lib. Jadi, gunakan perintah berikut:

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
lalas
sumber
29

Anda dapat memuat libjvm.dylib secara eksplisit, dengan menjalankan seperti

dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)
yuan
sumber
Mungkin pasti, tapi tidak nyaman. Jawaban yang diterima mungkin merupakan pilihan yang lebih baik. +1untuk menawarkan alternatif.
thiagoveloso
27

Di macOS High Sierra (10.13.1) dan Java Versi 9 Anda harus menggunakan jalur JVM yang sedikit berbeda (perhatikan jrefolder yang hilang di jalur tersebut dibandingkan dengan petunjuk untuk versi Java sebelumnya):

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

Anda juga harus memberi tahu R tentang JVM:

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/
Endre
sumber
Mengagumkan. Berhasil! Tampaknya saran untuk El Capitan tidak berfungsi untuk Sierra
KarthikS
Terima kasih banyak, ini juga berhasil untuk saya. macOS High Sierra 10.13.2
pat_krat
Ini membantu saya. Saya tidak melakukan bagian R beri tahu. Itu masih berhasil. Terima kasih banyak :)
Harish
17

Perintah berikut berfungsi:

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

Setelah itu, di RStudio, memuat rJava bekerja melalui pemuatan paket "xlsx".

library("xlsx")

PS # 1 Lingkungan: Mac OS X El Capitan 10.11.3+ dengan RStudio 0.99.491+ dan R 3.2.3+. (Saya sekarang telah menguji ini juga di macOS Sierra (10.12) dan R.3.3.1.)

PS # 2 Saya menemukan itu openxlsxjauh lebih cepat dan tidak bergantung pada Java untuk bekerja, jadi saya sekarang menggunakan paket itu. Harapan yang membantu orang lain.

Sander W. van der Laan
sumber
1
terima kasih temanku, kamu menyelamatkan hariku. Saya mencoba dengan solusi lain yang ditemukan di sekitar tetapi inilah yang memecahkan masalah saya.
Matteo De Felice
1
Pengguna El Cap lainnya (tetapi menggunakan MacGUI) dengan suara terima kasih. Mencoba ini sejak pertama karena tampaknya paling sederhana (dan upaya sebelumnya dengan petunjuk untuk menginstal Java runtime 1.6 tidak memecahkan masalah) dan langsung berhasil dengan pkg: rJava dan ketergantungan pkg; XLConnect. Mungkin perlu menginstal Java 1.6 lama yang tersedia dari Oracle dan ditautkan dari halaman Apple.
IRTFM
1
Hai, saran Anda juga berfungsi dengan MacOS High Sierra, terima kasih banyak !!
user8193079
1
openxlsxFTW!
iled
Iya! @iled: Saya setuju, lebih baik gunakan openxlsxsaja.
Sander W. van der Laan
7

Anda harus dapat menggunakan CRAN rJava, tanpa perlu mengkompilasi ulang rJava atau melakukan langkah tambahan apa pun dengan menautkan pustaka bersama ke direktori pustaka kerangka kerja R.

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries
Jim
sumber
6

Beginilah cara saya mengonfigurasinya berfungsi dengan baik pada dua Mac yang menjalankan Mac OS X El Capitan (10.11.6):

  1. Copot pemasangan 'rJava' dengan mengeluarkan perintah berikut di jendela terminal:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. Unduh dan instal perangkat lunak Java dari Oracle: https://www.java.com/en/download/mac_download.jsp

  3. Tambahkan baris berikut untuk /Users/<userid>/.bashrcmenggunakan editor favorit Anda:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
  4. Tutup dan mulai ulang terminal mana pun, jendela R, dan RStudio (untuk melihat perubahannya .bashrc).

  5. Jalankan perintah berikut di jendela Terminal:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  6. Jalankan perintah berikut di jendela Terminal:

    sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
Gregory R. Warnes
sumber
Saya mendapatkan kesalahan pustaka / penaut licuuc saat mengikuti ini, apakah Anda dapat menjelaskannya? Mencoba menginstal di macOS Sierra, selengkapnya di sini (Sebelumnya di El Capitan).
hhh
5

Berikut langkah-langkah mudahnya:

  1. hapus paket rJava: remove.packages (rJava)
  2. lebih dekat
  3. instal Java terbaru di mac Anda
  4. buka terminal dan ketik perintah ini: sudo R CMD javareconf
  5. Buka R dan instal rJava dengan perintah ini:

    install.packages ("rJava", dependencies = TRUE, type = "source")

Hamidreza Ahady Dolatsara
sumber
Saya benar-benar melakukan ini sebelum saya berakhir di sini. Itu membuat perpustakaan tergantung rjava saya menginstal tetapi tidak memulai. Menghubungkan dengan dari libjvm.dylibdalam /usr/local/libmembuatnya juga mulai :)
jonalv
3

Masalah gambar tidak ditemukan ada dengan penginstalan baru di OSX High Sierra dengan Java SE 10 JDK terbaru.

Saya dapat menyelesaikan masalah jalur dengan rJava menggunakan perbaikan yang ditemukan di halaman masalah rJava Github: https://github.com/su/rJava/issues/78

R CMD javareconf JAVA_CPPFLAGS = -I / System / Library / Frameworks / JavaVM.framework / Headers

Galen
sumber
1

Inilah yang berhasil untuk saya di MAC:

  1. di Anda ~/.profileatau ~/.bashrctambahkan baris ini: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile(atau % 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. Dari terminal masukkan perintah ini: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. Muat file library("rJava", "RWeka")

Semoga berhasil.

Nasser
sumber
1

Mungkin jawaban sederhana lain yang tidak menyentuh sistem file Anda:

$ 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

(Gantikan jdk1.8.0_131.jdkdengan jalur JDK Anda.)

mokjpn.dll
sumber
2
Saya memiliki homebrew R, dan perintah yang tepat yang bekerja untuk saya adalah: install_name_tool -add_rpath /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre/lib/server /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so. Saya dapat melihat bahwa jalan setapak itu hilang denganotool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian
@Ian mungkin Anda tahu solusi untuk ini di sini di mana saya telah menginstal Java dengan Homebrew dan sekarang mencoba membuat rJava berfungsi. Ide ide?
hhh
1

Periksa lokasi file libjvm.dylib.

Coba ini, dalam kasus saya ini berhasil:

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

Saya melalui semua pemecahan masalah yang dapat saya temukan, kemudian menginstal jdk-11.0.1_osx-x64_bin.dmg dari: unduhan Oracle

Semuanya bekerja dengan sempurna setelah itu.

Periksa versi library yang tidak dimuat saat Anda menjalankan library ('rJava') dan cocokkan dengan versi java yang perlu Anda instal.

pengguna2428818
sumber
1

Saya perhatikan bahwa 'rJava' cukup ketat tentang versi JDK saat memuat di Rstudio.
Dalam kasus saya (Mac OS. 10.14.6 - Mojave) saya telah menginstal jdk-13 yang diuji terhadap jdk-11.
Saya telah menautkan versi JDK saya ke direktori yang tidak ada yang dianggap valid oleh Rstudio (JDK 11):

sudo ln -sf /Library/Java/JavaVirtualMachines/jdk-13.jdk/ /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk

dan ternyata itu bekerja seperti pesona ...
BTW., tidak ada masalah untuk menjalankan 'rJava' mengikuti petunjuk sebelumnya di asli R.

speleo
sumber
0

Baris di bawah ini telah memecahkan masalah yang sama yang saya alami dengan rJavapaket seperti yang dilakukan beberapa orang lain dalam diskusi ini. Saya yakin ada lebih dari satu solusi untuk masalah ini dan saya dengan tulus berterima kasih kepada mereka semua atas kontribusinya karena terkadang satu baris seperti di bawah ini menghemat banyak waktu untuk dibuang ke sampah!

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

Jalankan perintah berikut pada baris perintah: sudo R CMD javareconf

Beberapa solusi di atas telah menyebutkan ini, tetapi mereka juga menyarankan agar seseorang menghapus dan kemudian menginstal ulang rJavapaket tersebut. Saya menemukan langkah-langkah tambahan itu tidak perlu.

Megatron
sumber
Saya mencoba solusi Anda sudo R CMD javareconftetapi library(rJava)masih memberikan kesalahan yang sama: 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.5/Resources/library/rJava/libs/rJava.so': ... Reason: image not found
Lazarus Thurston
0

Anda dapat mengubah referensi di R dengan menggunakan perintah berikut:

sudo install_name_tool -change /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rJava/libs/rJava.so
Si Kh
sumber