Ошибка загрузки 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:
Желаем удачи.
Ответ 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, которая вам нужна.
Ответ 14
Здесь вы можете загрузить устаревшую версию Java 6 для El Capitan: https://support.apple.com/kb/DL1572?viewlocale=en_US&locale=en_US
После этого пакет rJava работает для меня.
Ответ 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.