Błąd ładowania rJava w RStudio / R po „uaktualnieniu” do OSX Yosemite

122

Niedawno „zaktualizowałem” system OSX Mountain Lion do Yosemite iz wersji R 3.1.3 do 3.2. Zaraz po aktualizacji, kiedy otworzyłem R lub RStudio, pojawiło się wyskakujące okienko z informacją, że muszę zainstalować Javę 6. Ponadto ładowanie rJavalub dowolny pakiet zależny od rJava (np. xlsx) Spowodował awarię RStudio (R również się zawiesił kiedy próbowałem tego, otwierając R.appbezpośrednio).

Po wypróbowaniu kilku poprawek znalezionych w Stack Overflow i innych miejscach (więcej szczegółów poniżej), jestem w punkcie, w którym ładowanie rJavalub dowolny pakiet, od którego zależy, rJavanie powoduje już awarii R, ale powoduje następujący błąd:

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

Jeśli jednak wywołam R z wiersza poleceń, a następnie załaduję rJavalub dowolny pakiet, od którego zależy rJava, wydaje się, że działa (lub przynajmniej nie otrzymuję żadnych komunikatów o błędach).

Próbowałem wielu różnych poprawek, niektóre z nich kilka razy, i nie pamiętam dokładnie, co zrobiłem w jakiej kolejności (nie zdawałem sobie sprawy, że to będzie takie grzęzawisko i tak naprawdę nie śledziłem) , ale oto istota tego:

  • Dodano do mojego .bash_profile(zgodnie z tą odpowiedzią SO ):

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

  • Ponownie skonfigurowano Javę z wiersza poleceń w następujący sposób:

    sudo R CMD javareconf -n

  • Sprawdziłem options("java.home")i odkryłem, że jest to ustawione na NULL. Próbowałem ustawić go na następujące (na to pytanie SO ):

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

  • Zainstalowałem najnowszy zestaw Java Development Kit i ponownie zainstalowałem rJava ze źródła (nie pamiętam, gdzie go znalazłem).

W pewnym momencie, próbując wszystkich, udało mi się załadować rJava bez awarii R, ale zamiast tego otrzymałem komunikat o błędzie opublikowany powyżej. Ponadto, kiedy opuszczałem RStudio, wydawałoby się, że zamyka się normalnie, ale wtedy wyskakuje komunikat „RStudio zakończyło się nieoczekiwanie”, wskazując, że program uległ awarii podczas próby zamknięcia.

Ostatecznie zdecydowałem się zainstalować Javę na OS X 2014-001 (Java 6), ponieważ wydawało mi się, że się opcje. Teraz, gdy otworzyłem R lub RStudio, wyskakujący komunikat „To oprogramowanie wymaga Java 6” nie jest już wyświetlany. Jednak nadal otrzymywałem .onLoad failed in loadNamespace() for 'rJava'powyższy komunikat o błędzie.

Przeglądając niektóre posty, które już przeglądałem, zauważyłem inną TAK odpowiedź , którą wcześniej przegapiłem, która zalecała otwarcie RStudio z następującym kodem wiersza poleceń, który daje RStudio poprawną ścieżkę do java:

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

To otworzyło okno RStudio i mogłem też załadować rJava i pakiety, które od niego zależą, bez błędu.

Na koniec spróbowałem uruchomić R z wiersza poleceń (czego wcześniej nie robiłem). Okazuje się, że w linii poleceń ładowanie rJavaczy jakikolwiek pakiet zależny od rJavadziała i nie wyrzuca żadnych błędów.

Więc teraz mogę dostać rJava do pracy, jeśli otworzę RStudio z wiersza poleceń z kodem, który daje RStudio ścieżkę java (jak wspomniano powyżej). Chciałbym jednak znaleźć sposób na naprawienie podstawowego problemu, cokolwiek by to nie było, tak aby RStudio można było otworzyć w zwykły sposób na Maca, bez potrzeby używania wiersza poleceń. Obawiam się również, że zainstalowanie starej wersji Javy może spowodować problemy.

Czy ktoś ma jakieś pomysły jak zdiagnozować i rozwiązać ten problem?

eipi10
źródło
Czy to rozwiązanie nadal działa w El Capitan? Mam to działające przed użyciem LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudiosztuczki, ale już nie działa. Ja napisałem blogu dotyczącą tej kwestii i opisane tam ten problem. Zastanawiam się, czy inni też mają ten problem w tej konfiguracji, czy to moja wina.
Paul Klemm,
Nadal używam Yosemite, więc nie jestem pewien. Poniżej znajdziesz odpowiedź związaną z El Capitan.
eipi10
Ok, myślę, że wtedy zadam nowe pytanie. Tak El Capitan, poniższe rozwiązanie jest pomocne, gdy tylko RStudioładuje się rJavazgodnie z oczekiwaniami.
Paul Klemm
2
Zadziałało po ponownym uruchomieniu RStudio
Pranay Aryal
Podczas diagnozowania spróbuj otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so uzyskać listę współdzielonych bibliotek i sposoby ich rozwiązania. Nie jestem pewien, jak odkryć zawartość środowiska wykonawczego @rpath.
Dave X

Odpowiedzi:

279

Miałem ten sam problem i przeszedłem przez te same kroki co Ty. Ostatnim krokiem umożliwiającym uruchomienie RStudio przez Finder / Spotlight było połączenie libjvm.dylib z / usr / local / lib:

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

-f flaga jest dodawana, aby wymusić nadpisanie istniejącego pliku / łącza

Alex Popov
źródło
4
Pracowano nad rozwiązaniem tego samego problemu po zakończeniu aktualizacji z El Capitan do Sierra. +1
Murta
2
To rozwiązało wiele problemów; zwłaszcza jeśli pochodzi pierwotny błąd, cannot jfindclass[[1]]który może pochodzić z rJavy i sterownika JDBC
Jenks
1
Muszę uruchamiać to polecenie za każdym razem, gdy aktualizuję Javę na moim Macbooku Pro. Nadal działa na macOS Sierra 10.12.5 i Java Version 8 Update 141.
thiagoveloso
11
To prawie zadziałało dla mnie. Dodatkowo musiałem dodać dowiązanie symboliczne w frameworku R do /usr/local/lib/libjvm.dylibpliku, ponieważ / usr / local / lib / nie wydaje się znajdować na @rpath. Na przykład:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Dave X
1
Może to być przydatne github.com/snowflakedb/dplyr-snowflakedb/wiki/ ...
user2079550
53

W systemie OSX El Capitan 10.11 użytkownik nie ma uprawnień do zapisu w / usr / lib. Zamiast tego użyj następującego polecenia:

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
lalas
źródło
29

Możesz załadować libjvm.dylib jawnie, uruchamiając jak

dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/jre/lib/server/libjvm.dylib')
library(rJava)
yuan
źródło
Na pewno możliwe, ale nie wygodne. Przyjęta odpowiedź jest prawdopodobnie lepszą opcją. +1za zaoferowanie jednak alternatywy.
thiagoveloso
27

W systemie macOS High Sierra (10.13.1) i Java w wersji 9 musisz użyć nieco innej ścieżki JVM (zwróć uwagę na brakujący jrefolder w ścieżce w porównaniu z instrukcjami dla wcześniejszych wersji Java):

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

Musisz również powiadomić R o 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
źródło
Niesamowite. To się udało! Wygląda na to, że sugestie dotyczące El Capitan nie działają dla Sierra
KarthikS,
Wielkie dzięki, to też zadziałało. macOS High Sierra 10.13.2
pat_krat
To mi pomogło. Nie zrobiłem części powiadamiającej R. Nadal działało. Wielkie dzięki :)
Harish
17

Następujące polecenie działa:

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

Następnie, w RStudio, ładowanie rJava działa poprzez ładowanie pakietu "xlsx".

library("xlsx")

Środowisko PS nr 1: Mac OS X El Capitan 10.11.3+ z RStudio 0.99.491+ i R 3.2.3+. (Przetestowałem to teraz także na macOS Sierra (10.12) i R.3.3.1.)

PS # 2 Uważam, że openxlsxjest znacznie szybszy i nie polega na Javie, więc teraz używam tego pakietu. Mam nadzieję, że to pomoże innym.

Sander W. van der Laan
źródło
1
dziękuję przyjacielu, uratowałeś mi dzień. Próbowałem z innymi rozwiązaniami znalezionymi w pobliżu, ale to właśnie rozwiązało mój problem.
Matteo De Felice
1
Inny użytkownik El Cap (ale korzystający z MacGUI) z podziękowaniem. Próbowałem tego od początku, ponieważ wydaje się to najprostsze (a wcześniejsze próby ze wskazówkami dotyczącymi instalacji środowiska wykonawczego Java 1.6 nie rozwiązały problemu) i natychmiastowy sukces z pakietem: rJava i pakiet zależności; XLConnect. Może być konieczne zainstalowanie starszej wersji Java 1.6, która jest dostępna w firmie Oracle i do której link znajduje się na stronie Apple.
IRTFM,
1
Cześć, twoja rada działa również z MacOS High Sierra, wielkie dzięki !!
user8193079
1
openxlsxFTW!
iled
Tak! @iled: Zgadzam się, i openxlsxtak lepiej użyj .
Sander W. van der Laan
7

Powinieneś być w stanie używać CRAN rJava bez konieczności ponownej kompilacji rJava lub wykonywania jakichkolwiek dodatkowych kroków, łącząc bibliotekę współdzieloną z katalogiem biblioteki frameworków R.

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /Library/Frameworks/R.framework/Libraries
Jim
źródło
6

Oto jak skonfigurowałem go poprawnie na dwóch komputerach Mac z systemem Mac OS X El Capitan (10.11.6):

  1. Odinstaluj 'rJava', wydając następujące polecenia w oknie terminala:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. Pobierz i zainstaluj oprogramowanie Java z Oracle: https://www.java.com/en/download/mac_download.jsp

  3. Dodaj następujące wiersze, aby /Users/<userid>/.bashrcużyć swojego ulubionego edytora:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
  4. Zamknij i uruchom ponownie wszystkie okna terminala, R i RStudio (aby pobrać zmiany .bashrc).

  5. Uruchom następujące polecenie w oknie terminala:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  6. Uruchom następujące polecenie w oknie terminala:

    sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
Gregory R. Warnes
źródło
Otrzymuję błąd biblioteki / linkera licuuc podczas wykonywania tego, czy jesteś w stanie to wyjaśnić? Próbuję zainstalować na macOS Sierra, więcej tutaj (wcześniej w El Capitan).
hhh,
5

Oto proste kroki:

  1. usuń pakiet rJava: remove.packages (rJava)
  2. zamknij R.
  3. zainstaluj najnowszą Javę na swoim Macu
  4. otwórz terminal i wpisz to polecenie: sudo R CMD javareconf
  5. Otwórz R i zainstaluj rJava za pomocą tego polecenia:

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

Hamidreza Ahady Dolatsara
źródło
Zrobiłem to, zanim tu trafiłem. To spowodowało, że moja biblioteka zależna od rjava została zainstalowana, ale nie została uruchomiona. Linkowanie libjvm.dylibdo /usr/local/libsprawiło, że też się zaczęło :)
jonalv
3

Problem z nie znalezionym obrazem występuje w przypadku zupełnie nowej instalacji w systemie OSX High Sierra z najnowszą wersją Java SE 10 JDK.

Udało mi się rozwiązać problem ze ścieżką w rJava za pomocą poprawki znalezionej na stronie problemów rJava Github: https://github.com/su/rJava/issues/78

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

Galen
źródło
1

Oto, co zadziałało dla mnie na MAC:

  1. w twoim ~/.profilelub~/.bashrc dodaj tę linię: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile(lub % 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. Z terminala wprowadź następujące polecenie: %sudo R CMD javareconf
  6. install.packages("rJava", dependencies = TRUE, type = "source")
  7. install.packages("rJava", dependencies = TRUE, type = "source")
  8. Załaduj swój library("rJava", "RWeka")

Powodzenia.

Nassera
źródło
1

Może kolejna prosta odpowiedź, która nie dotyka twojego systemu plików:

$ 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

(Zastąp jdk1.8.0_131.jdkswoją ścieżką JDK.)

mokjpn
źródło
2
Mam homebrew R, a dokładna komenda że pracował dla mnie jest: 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. Udało mi się zobaczyć, że brakowało rpathotool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Ian
@Ian być może znasz tutaj rozwiązanie tego problemu , gdzie zainstalowałem Javę z Homebrew i teraz próbuję uruchomić rJava. Pomysły?
hhh
1

Sprawdź lokalizację pliku libjvm.dylib.

Spróbuj tego, w moim przypadku to zadziałało:

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

Przeszedłem przez wszystkie rozwiązania, które udało mi się znaleźć, a następnie zainstalowałem jdk-11.0.1_osx-x64_bin.dmg z: Oracle do pobrania

Po tym wszystko działało idealnie.

Sprawdź wersję biblioteki, która nie została załadowana podczas uruchamiania biblioteki ('rJava') i dopasuj ją do wersji Java, którą chcesz zainstalować.

user2428818
źródło
1

Zauważyłem, że 'rJava' jest dość restrykcyjny co do wersji JDK podczas ładowania w Rstudio.
W moim przypadku (Mac OS. 10.14.6 - Mojave) zainstalowałem jdk-13, który był testowany z jdk-11.
Połączyłem moją wersję JDK z nieistniejącym katalogiem, który został uznany za prawidłowy przez Rstudio (JDK 11):

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

i zaskakująco działa jak urok ... Przy
okazji, nie było problemu z uruchomieniem 'rJavy' zgodnie z poprzednimi instrukcjami w rodzimym R.

speleo
źródło
0

Ta linia poniżej rozwiązała ten sam problem, który miałem z rJavapakietem, jak kilka innych w tej dyskusji. Jestem pewien, że istnieje więcej niż jedno rozwiązanie tego problemu i serdecznie dziękuję im wszystkim za ich wkład, ponieważ czasami jedna linijka, taka jak ta poniżej, oszczędza dużo czasu przed wyrzuceniem do kosza!

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
Süleyman
źródło
0

Uruchom następujące polecenie w wierszu poleceń: sudo R CMD javareconf

Wspomniało o tym kilka powyższych rozwiązań, ale sugerują one również usunięcie, a następnie ponowne zainstalowanie rJavapakietu. Uznałem, że te dodatkowe kroki są niepotrzebne.

Megatron
źródło
Wypróbowałem twoje rozwiązanie, sudo R CMD javareconfale library(rJava)nadal daje te same błędy: 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

Możesz zmienić odniesienie w języku R za pomocą następującego polecenia:

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
źródło