ошибка загрузки 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 (per это так ответ):

    экспорт переменной JAVA_HOME="/УСР/IP-адресов/переменной JAVA_HOME -в 1.8"
    экспорт переменной LD_LIBRARY_PATH=$переменной JAVA_HOME/JRE и/Либ/сервера

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

    sudo R CMD javareconf-n

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

    параметры ("java.главная"= " /библиотека/Java/JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / jre")

  • установлена последняя версия Java Development Kit и переустановлена rJava из источника (не помню, где я это нашел один.)

в какой-то момент, пытаясь все это, я смог загрузить rJava без сбоев R, но вместо этого получил сообщение об ошибке запостил выше. Кроме того, когда я выхожу из RStudio, он, казалось бы, закрывается нормально, но затем неожиданно появляется сообщение "RStudio quit", указывающее, что программа разбилась при попытке закрыть.

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

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

переменной LD_LIBRARY_PATH=$(из/usr/IP-адресов/переменной JAVA_HOME)/среда jre/lib в/сервера: открыт-в RStudio

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

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

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

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

15 104

15 ответов:

у меня была та же проблема, и я прошел те же шаги, что и вы. Последним шагом, позволяющим запустить RStudio через Finder / Spotlight, было связать libjvm.dylib to /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 (обратите внимание на отсутствие 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/

следующая команда работает:

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

после этого, в RStudio, загрузка rJava работает через загрузку пакета "xlsx".

library("xlsx")

С. п. #1 окружающая среда: Мас OS X Эль-Капитан 10.11.3+ С в RStudio 0.99.491+ и R 3.2.3+. (Теперь я проверил это также на macOS Sierra (10.12) и R. 3.3.1.)

С. п. #2 я считаю, что openxlsx намного быстрее и не полагается на Java для работы, поэтому я теперь использую этот пакет. Надеюсь, что это поможет другим.

вот как я настроил его работу правильно на двух 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 windows (чтобы забрать изменения в .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")'
    

вы должны быть в состоянии использовать CRAN rJava, без необходимости перекомпилировать rJava или выполните дополнительные действия, связав общую библиотеку с каталогом библиотеки R Framework.

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

вот простые шаги для этого:

  1. удалить пакет rJava: удалить.пакеты(rJava)
  2. закрыть R
  3. установите последнюю версию Java на вашем mac
  4. откройте терминал и введите следующую команду: sudo R CMD javareconf
  5. откройте R и установите rJava с помощью этой команды:

    установить.пакеты ("rJava", dependencies=TRUE, type= "source")

изображение не найдено проблема существует с совершенно новой установки на OSX High Sierra с последней Java SE 10 JDK.

Я смог решить проблему пути с rJava, используя исправление, найденное на странице проблем rJava Github: https://github.com/s-u/rJava/issues/78

R CMD javareconf JAVA_CPPFLAGS= - I/System/Library/Frameworks / JavaVM.рамки/заголовки

вот что работало для меня на 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")

удачи.

может быть, еще один простой ответ, который не касается вашей файловой системы:

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

проверьте расположение libjvm.файл dylib нужна.

попробуйте это, в моем случае это сработало:

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

здесь вы можете скачать устаревшую версию Java 6 для El Capitan:https://support.apple.com/kb/DL1572?viewlocale=en_US&locale=en_US После этого пакет rJava работает для меня.

выполните в командной строке следующие команды: sudo R CMD javareconf

несколько решений выше уже упоминали об этом, но они также предполагают, что один удалить и впоследствии переустановить rJava пакета. Я счел эти дополнительные шаги излишними.

эта строка ниже решила ту же проблему, что и у меня с rJava пакет, как и некоторые другие в этом обсуждении. Я уверен, что есть более чем одно решение этой проблемы, и я искренне благодарю их всех за их вклад, потому что иногда одна строка, как показано ниже, экономит много времени от мусора!

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