Ошибка загрузки 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(за этот SO-ответ ) добавлено следующее :

    экспорт JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
    экспорт 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из исходников (не помню, где нашел).

В какой-то момент, пробуя все это, я смог загрузить rJavaR без сбоя, но вместо этого получил сообщение об ошибке, опубликованное выше. Кроме того, когда я выхожу из 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 / lib / server: открыть -a RStudio

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

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

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

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

eipi10
источник
Это решение все еще работает для вас в Эль-Капитане? У меня это работало до использования 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.
Dave X

Ответы:

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 до Sierra. +1
Мурта
2
Это решило множество проблем; особенно, если исходная ошибка возникает из-за cannot jfindclass[[1]]rJava и драйвера JDBC
Дженкс
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/
Дэйв Икс
1
Это может быть полезно github.com/snowflakedb/dplyr-snowflakedb/wiki/…
user2079550
53

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

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
Lalas
источник
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/
Эндре
источник
Потрясающие. Это сработало! Похоже, предложения для El Capitan не работают для Sierra
KarthikS
Большое спасибо, это сработало и для меня. macOS High Sierra 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 1.6 не решили проблему) и немедленный успех с pkg: rJava и pkg; XLConnect. Может потребоваться установить устаревшую версию Java 1.6, доступную в Oracle и связанную со страницы Apple.
IRTFM
1
Привет, ваш совет работает также с MacOS High Sierra, большое спасибо !!
user8193079
1
openxlsxFTW!
iled
Да! @iled: Согласен, openxlsxвсе равно лучше использовать .
Sander W. van der Laan
7

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

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, вы можете объяснить? Попытка установить на macOS Sierra, подробнее здесь (ранее в Эль-Капитане).
HHH
5

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

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

    install.packages ("rJava", dependencies = 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/issues/78

R CMD javareconf JAVA_CPPFLAGS = -I / System / Library / Frameworks / JavaVM.framework / Headers

гален
источник
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")

Удачи.

Nasser
источник
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.)

mokjpn
источник
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. Я смог увидеть, что отсутствует rpathotool -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 downloads

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

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

user2428818
источник
1

Я заметил, что rJava довольно строго относится к версии JDK при загрузке в Rstudio.
В моем случае (Mac OS. 10.14.6 - Мохаве) я установил 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.

спелео
источник
0

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

sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
Süleyman
источник
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
Si Kh
источник