Помилка завантаження rJava в RStudio / R після "оновлення" до OSX Yosemite


122

Нещодавно я "модернізував" з OSX Mountain Lion до Yosemite і з R 3.1.3 до 3.2. Відразу після оновлення, коли я відкрив R або RStudio, я отримав спливаюче повідомлення про те, що мені потрібно встановити Java 6. Крім того, завантаження rJavaабо будь-який пакет, що залежить від rJava (наприклад, xlsx), спричинив збій RStudio (R також вийшов з ладу коли я спробував це, відкривши 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(на цю відповідь ТАК ) додано наступне :

    експортувати JAVA_HOME = "/ usr / libexec / java_home -v 1,8" "
    експорту LD_LIBRARY_PATH = $ JAVA_HOME / jre / lib / сервер

  • Переконфігуруйте Java з командного рядка так:

    sudo R CMD javareconf -n

  • Перевірив options("java.home")і виявив, що це було встановлено NULL. Я спробував встановити його на наступне (за цим питанням ТАК ):

    параметри ("java.home" = "/ Бібліотека / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Зміст / Головна / jre")

  • Встановив останній комплект Java Development Kit і перевстановив rJavaз джерела (не пам'ятаю, де я його знайшов).

У якийсь момент, пробуючи все це, я зміг завантажити rJavaбез збою R, але натомість отримав повідомлення про помилку, розміщене вище. Крім того, коли я вийшов з RStudio, воно, здавалося б, нормально закривається, але тоді з'явиться повідомлення "RStudio несподівано кинуто", що вказує на те, що програма зазнала аварії під час спроби закрити.

Нарешті я вирішив встановити Java для OS X 2014-001 (Java 6), оскільки мені здалося, що у мене не вистачає варіантів. Тепер, коли я відкрив R або RStudio, спливаюче повідомлення "Це програмне забезпечення потребує Java 6" більше не з'являлося. Однак я все ще отримував .onLoad failed in loadNamespace() for 'rJava'повідомлення про помилку, розміщене вище.

Переглядаючи деякі з публікацій, які я вже переглянув, я помітив ще одну відповідь, яку я пропустив раніше, який рекомендував відкрити RStudio із наступним кодом командного рядка, який дає RStudio правильний шлях до Java:

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

Це відкрило вікно RStudio, і я також зміг завантажити rJavaта залежні від нього пакунки, не отримуючи помилок.

Нарешті, я спробував запустити R з командного рядка (чого раніше не робив). Виявляється, що в командному рядку завантаження rJavaабо будь-який пакет, який залежить від rJavaроботи, не видає помилок.

Отже, я зараз rJavaможу приступити до роботи, якщо відкрию RStudio з командного рядка з кодом, який надає RStudio шлях Java (як зазначено вище). Однак я хотів би знайти спосіб виправити основну проблему, якою б вона не була, щоб RStudio можна було відкрити звичайним способом Mac, не потребуючи помилок командного рядка. Я також стурбований тим, що встановлення старої версії Java може спричинити проблеми в дорозі.

Хтось має ідеї, як діагностувати та вирішити це питання?


Чи все-таки це рішення працює для вас в Ель-Капітані? Я працював над цим LD_LIBRARY_PATH=$(/usr/libexec/java_home)/jre/lib/server: open -a RStudioфокусом, але більше не працює. Я написав повідомлення в блозі щодо цієї проблеми та описав цю проблему там. Цікаво, чи відчувають інші проблеми і в цій конфігурації, чи я винен.
Пол Клемм

Я все ще використовую Yosemite, тому я не впевнений. Дивіться нижче відповідь, пов’язану з El Capitan.
eipi10

Гаразд, я думаю, тоді я напишу нове запитання. Так, El Capitanрішення нижче є корисним, як тільки RStudioзавантажуються, rJavaяк очікувалося.
Пол Клемм

2
Це спрацювало після того, як я перезапустив RStudio
Pranay Aryal

Під час діагностики спробуйте otool -L /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so отримати список спільних бібліотек та спосіб їх вирішення. Я не впевнений, як відкрити вміст часу виконання @rpath.
Дейв Х

Відповіді:


279

У мене була така ж проблема і пройшла ті ж кроки, що і ви. Останнім кроком, щоб дозволити запуск RStudio через Finder / Spotlight, було з'єднання libjvm.dylib з / usr / local / lib:

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

-f прапор додається, щоб примусити перезаписати наявний файл / посилання


4
Працювали над вирішенням тієї самої проблеми, коли робиться оновлення від El Capitan до Сьєрри. +1
Мурта

2
Це вирішило багато проблем; особливо, якщо оригінальна помилка виходить від cannot jfindclass[[1]]rJava та драйвера JDBC
Jenks

1
Мені потрібно запускати цю команду щоразу, коли я оновлюю Java на своєму Macbook Pro. Він все ще працює на macOS Sierra 10.12.5 та оновлення Java версії 8 141.
thiagoveloso

11
Це майже працювало для мене. Крім того, мені довелося додати до /usr/local/lib/libjvm.dylibфайлу симпосилання в рамці R , оскільки / usr / local / lib /, схоже, не знаходиться на @rpath. Наприклад:ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
Дейв X


53

На OSX El Capitan 10.11 користувач не має дозволу писати в / usr / lib. Тому замість цього використовуйте таку команду:

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

29

Ви можете завантажувати libjvm.dylib експліцитно, запускаючи як

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

Можливо точно, але не зручно. Прийнята відповідь, мабуть, кращий варіант. +1але пропонуємо альтернативу.
thiagoveloso

27

Для macOS High Sierra (10.13.1) та версії Java 9 вам потрібно використовувати дещо інший шлях до JVM (помічайте jreпапку, що відсутня на шляху, порівняно з інструкціями для попередніх версій Java):

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

Ви також повинні повідомити R про 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/

Дивовижно. Це спрацювало! Здається, що пропозиції щодо Ель-Капітана не працюють для Сьєрри
KarthikS

Велике спасибі, це працювало і для мене. macOS Висока Сьєрра 10.13.2
pat_krat

Це мені допомогло. Я не робив R частину сповіщення. Це все-таки спрацювало. Велике спасибі :)
Harish

17

Наступні команди працюють:

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

Після цього в RStudio завантаження rJava працює через завантаження пакету "xlsx".

library("xlsx")

Навколишнє середовище PS # 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.)

PS # 2 Я вважаю, що openxlsxце набагато швидше і не покладається на роботу Java, тому я зараз використовую цей пакет. Сподіваюся, що допомагає іншим.


1
дякую, друже, ти врятував мені день. Я намагався з іншими рішеннями, знайденими навколо, але саме це вирішило мою проблему.
Маттео Де Феліче

1
Ще один користувач El Cap (але використовує MacGUI) з подякою. Спробував це спочатку, оскільки виявляється найпростішим (і попередні зусилля щодо вказівок для установки Java Runtime 1.6 не вирішили проблему) та негайного успіху з pkg: rJava та залежність pkg; XLConnect. Можливо, потрібно встановити застарілу Java 1.6, доступну в Oracle та пов'язану зі сторінки Apple.
IRTFM

1
Привіт, Ваша порада також працює з MacOS High Sierra, велике спасибі !!
користувач8193079

1
openxlsxFTW!
іл

Так! @iled: Я згоден, краще openxlsxвсе-таки використовувати .
Сандер В. ван дер Лаан

7

Ви повинні мати можливість використовувати CRAN rJava, не потребуючи перекомпіляції rJava або будь-яких додаткових кроків, пов'язуючи спільну бібліотеку з каталогом бібліотеки рамок R.

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

6

Ось як я налаштував його на належну роботу на двох Mac, що працюють під управлінням Mac OS X El Capitan (10.11.6):

  1. Видаліть 'rJava', видавши наступні команди у вікні терміналу:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
  2. Завантажте та встановіть програмне забезпечення Java від Oracle: 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. Закрийте та перезапустіть будь-які вікна терміналів, R та RStudio (щоб отримати зміни до .bashrc).

  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")'

Я отримую помилку бібліотеки licuuc / linker під час виконання цього, ви можете пояснити? Спроба встановити на macOS Sierra, докладніше тут (раніше в El Capitan).
hhh

5

Ось прості кроки для цього:

  1. видаліть пакет rJava: delete.packages (rJava)
  2. закрити R
  3. встановити найновішу Java на mac
  4. відкрити термінал і ввести цю команду: sudo R CMD javareconf
  5. Відкрийте R та встановіть rJava за допомогою цієї команди:

    install.packages ("rJava", залежності = TRUE, type = "source")


Я фактично робив це, перш ніж я опинився тут. Це зробило мою бібліотеку залежною від rjava встановити, але не запустити. Ув'язка libjvm.dylibв /usr/local/libзробив це також почати :)
jonalv

3

Проблема з не знайденим зображенням існує з новою установкою на OSX High Sierra з останньою версією Java SE 10 JDK.

Мені вдалося вирішити проблему шляху з rJava, використовуючи виправлення, знайдене на сторінці проблем rJava Github: https://github.com/su/rJava/isissue/78

R CMD javareconf JAVA_CPPFLAGS = -I / Система / Бібліотека / Рамки / JavaVM.framework / Заголовки


1

Ось що для мене працювало на 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

Можливо, ще одна проста відповідь, яка не стосується вашої файлової системи:

$ 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.)


2
У мене домашній R, і точна команда, яка працювала на мене,: 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. Мені вдалося побачити, що пропав бездоріжжяotool -l /usr/local/lib/R/3.3/site-library/rJava/libs/rJava.so | grep LC_RPATH
Іван

@Ian може бути , ви знаєте , рішення цієї проблеми тут , де я встановив Java з Homebrew і тепер намагаюся отримати rJava роботу. Ідеї?
hhh

1

Перевірте розташування файлу libjvm.dylib.

Спробуйте це, у моєму випадку це спрацювало:

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

1

Я пройшов усі проблеми усунення неполадок, а потім встановив jdk-11.0.1_osx-x64_bin.dmg від: Oracle завантаження

Після цього все спрацювало чудово.

Перевірте версію бібліотеки, яку не завантажували під час запуску бібліотеки ('rJava'), і порівняйте її з необхідною інстальованою вами версією java.


1

Я помітив, що 'rJava' досить суворо стосується версії JDK під час завантаження в Rstudio.
У моєму випадку (Mac OS. 10.14.6 - Mojave) я встановив jdk-13, який був протестований на jdk-11.
Я пов’язав свою версію JDK з неіснуючою каталогом, який вважався дійсним Rstudio (JDK 11):

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

і дивно, що це працює як шарм ...
До речі, не було проблем запустити "rJava", дотримуючись попередніх інструкцій у рідному Р.



0

Цей рядок нижче вирішив ту саму проблему, яку я мав з rJavaпакетом, як і деякі інші в цій дискусії. Я впевнений, що вирішення цієї проблеми існує не одне, і я щиро дякую їм усім за їх внесок, тому що іноді один рядок, як той, що внизу, економить багато часу від переходу на сміття!

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

0

Виконайте наступне в командному рядку: sudo R CMD javareconf

Кілька вищезазначених рішень згадували про це, але вони також пропонують видалити та згодом знову встановити rJavaпакет. Я вважав ці додаткові кроки непотрібними.


Я спробував ваше рішення, sudo R CMD javareconfале library(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.5/Resources/library/rJava/libs/rJava.so': ... Reason: image not found
Лазар Турстон

0

Ви можете змінити посилання на R за допомогою наступної команди:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.