Вопрос-ответ

rJava load error in RStudio/R after "upgrading" to OSX Yosemite

Ошибка загрузки rJava в RStudio / R после "обновления" до OSX Yosemite

Недавно я "обновился" с 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 (согласно этому ответу SO):



    export JAVA_HOME="/usr / libexec / java_home -v 1.8"
    export LD_LIBRARY_PATH=$JAVA_HOME/jre / библиотека / сервер



  • Перенастроил java из командной строки следующим образом:



    sudo R CMD javareconf -n



  • Проверил options("java.home") и обнаружил, что для этого значения установлено значение NULL. Я попытался установить для него следующее значение (согласно этому вопросу SO):



    параметры ("java.home"="/Библиотека / Java / JavaVirtualMachines/jdk1.8.0_45.jdk/Содержимое / Home/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' сообщение об ошибке, опубликованное выше.

При просмотре некоторых сообщений, которые я уже просмотрел, я заметил другой ответ SO, который я пропустил ранее, в котором рекомендовалось открыть RStudio с помощью следующего кода командной строки, который указывает RStudio правильный путь к java:


LD_LIBRARY_PATH=$(/usr/libexec/java_home)/ jre/ библиотека / сервер: открыть RStudio


Это открыло окно RStudio, и я также смог загрузить rJava и пакеты, которые зависят от него, без получения ошибки.

Наконец, я попытался запустить R из командной строки (чего раньше не делал). Оказывается, что в командной строке загрузка rJava или любого зависящего от rJava пакета работает и не выдает никаких ошибок.

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

У кого-нибудь есть какие-либо идеи о том, как диагностировать и решить эту проблему?

Переведено автоматически
Ответ 1

У меня была такая же проблема, и я выполнил те же шаги, что и вы. Последним шагом, позволяющим запустить 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 добавлен флаг принудительной перезаписи существующего файла / ссылки

Ответ 2

В OSX El Capitan 10.11 у пользователя нет прав на запись в /usr / lib. Поэтому вместо этого используйте следующую команду:

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
Ответ 3

Вы можете загрузить libjvm.dylib явно, выполнив как

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

В 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/
java