Ошибка загрузки 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 напрямую).

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

    экспорт JAVA_HOME = "/usr/libexec/java_home -v 1.8"
    export LD_LIBRARY_PATH = $JAVA_HOME/jre/lib/server

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

    sudo R CMD javareconf -n

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

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

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

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

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

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

Итак, теперь я могу заставить rJava работать, если я открою RStudio из командной строки с кодом, который дает RStudio путь java (как отмечено выше). Тем не менее, я хотел бы найти способ исправить основную проблему, какова бы она ни была, чтобы RStudio можно было открыть обычным способом Mac, без необходимости командной строки kludge. Я также обеспокоен тем, что наличие старой версии установленной 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/

Ответ 5

Выполняется следующая команда:

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

После этого в RStudio загрузка rJava выполняется через загрузку пакета "xlsx".

library("xlsx")

P.S. # 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.)

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

Ответ 6

Вот как я правильно настроил его на двух компьютерах Mac под управлением Mac OS X El Capitan (10.11.6):

  • Удалите 'rJava', выполнив следующие команды в окне терминала:

    Rscript -e 'remove.packages("rJava")'
    sudo Rscript -e 'remove.packages("rJava")'
    
  • Загрузите и установите программное обеспечение Java из Oracle: https://www.java.com/en/download/mac_download.jsp

  • Добавьте следующие строки в /Users/<userid>/.bashrc с помощью вашего любимого редактора:

    # Set JAVA_HOME so rJava package can find it
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)/jre
    
  • Закройте и перезапустите все окна терминала, R и RStudio (чтобы получить изменения в .bashrc).

  • Выполните следующую команду в окне терминала:

    sudo ln -sf $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
    
  • Выполните следующую команду в окне терминала:

    sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
    

Ответ 7

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

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

Ответ 8

Вот несколько простых шагов для этого:

  • удалите пакет rJava: remove.packages(rJava)
  • закрыть R
  • установить последнюю версию Java на Mac.
  • откройте терминал и введите следующую команду: sudo R CMD javareconf
  • Откройте R и установите rJava с помощью этой команды:

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

Ответ 9

Проблема с не найденным образом существует при новой установке 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.framework/Headers

Ответ 10

Вот что сработало для меня по MAC:

  • в ~/.profile или ~/.bashrc добавить эту строку: %export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home

    1.1 % source .profile (или % source .bashrc)

  • % sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
  • remove.packages(rJava)
  • remove.packages(Rweka)
  • С терминала введите следующую команду:  %sudo R CMD javareconf
  • install.packages("rJava", dependencies = TRUE, type = "source")
  • install.packages("rJava", dependencies = TRUE, type = "source")
  • Загрузите library("rJava", "RWeka")

Желаем удачи.

Ответ 11

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

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

Ответ 12

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

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

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

Ответ 13

Я просмотрел все обнаруженные неисправности и установил jdk-11.0.1_osx-x64_bin.dmg из: Oracle загрузок

После этого все заработало идеально.

Проверьте версию библиотеки, которая не была загружена при запуске библиотеки ('rJava'), и сопоставьте ее с версией java, которая вам нужна.

Ответ 15

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

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

Ответ 16

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

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

Ответ 17

Я заметил, что 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, следуя предыдущим инструкциям на родном R.