Ошибка rjava-компоновщика licuuc с ошибкой Anaconda & fopenmp без Anaconda для macOS Sierra 10.12.4

Я хочу установить rJava на macOS Sierra 10.12.4. Моя текущая версия Java Java version: 1.8.0_131, согласно R CMD javareconf|grep version. Я установил Java с контейнером Homebrew.

Моя Java запускает следующие

$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Моя версия R

R version 3.3.2 (2016-10-31) -- "Sincere Pumpkin Patch"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin11.4.2 (64-bit)

R Конфигурация Java работает так, что

$ R CMD javareconf
Java interpreter : /usr/bin/java
Java version     : 1.8.0_131
Java home path   : /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre
Java compiler    : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar
Non-system Java on macOS

trying to compile and link a JNI program 
detected JNI cpp flags    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin
detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
During startup - Warning messages:
1: Setting LC_COLLATE failed, using "C" 
2: Setting LC_TIME failed, using "C" 
3: Setting LC_MESSAGES failed, using "C" 
4: Setting LC_MONETARY failed, using "C" 
clang -I/Volumes/osx/201705_anaconda/anaconda/lib/R/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/../include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/../include/darwin -I/Volumes/osx/201705_anaconda/anaconda/include    -fPIC  -I/Volumes/osx/201705_anaconda/anaconda/include  -c conftest.c -o conftest.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Volumes/osx/201705_anaconda/anaconda/lib/R/lib -arch x86_64 -L/Volumes/osx/201705_anaconda/anaconda/lib -lgfortran -L/Volumes/osx/201705_anaconda/anaconda -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server -ljvm -L/Volumes/osx/201705_anaconda/anaconda/lib/R/lib -lR -lintl -liconv -lc -Wl,-framework -Wl,CoreFoundation


JAVA_HOME        : /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre
Java library path: $(JAVA_HOME)/lib/server
JNI cpp flags    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/darwin
JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
Updating Java configuration in /Volumes/osx/201705_anaconda/anaconda/lib/R
Done.

который выглядит правильно настроенным как здесь и этот поток SO не может скомпилируйте JNI-программу rJava, чтобы JDK выглядела правильно.

Я получаю ошибку компоновщика с помощью команды install.packages("rJava")

checking Java support in R... present:
interpreter : '/usr/bin/java'
archiver    : '/usr/bin/jar'
compiler    : '/usr/bin/javac'
header prep.: '/usr/bin/javah'
cpp flags   : '-I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/../include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/../include/darwin'
java libs   : '-L/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server -ljvm'
...
ld: library not found for -licuuc
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libjri.jnilib] Error 1
make[1]: *** [src/JRI.jar] Error 2
make: *** [jri] Error 2
ERROR: compilation failed for package ‘rJava’

У меня такая же ошибка, несмотря на источники Java: официальный JDK и Homebrew Java возвращают ту же ошибку компоновщика/библиотеки.

Что может вызвать эту ошибку линкера/библиотеки licuuc с Anaconda и как ее исправить?

Старый поток

Исправления, которые я пробовал

  • options("java.home") возвращает NULL, поэтому options("java.home"="/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/"), руководствуясь здесь

  • Unistalled Homebrew Java и заменил его на Oracele Java и JDK здесь: сохраняется та же ошибка библиотеки libcuc/linker. Я пробовал sudo Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")', руководствуясь этим, но те же ошибки licuuc library not found.

  • Обновлен macOS от El Capitan 10.11.6 до Sierra 10.12.4, но сохраняется ту же ошибку библиотеки libcuc/linker.

  • Работа без sudo, javac отсутствует (после этого здесь и здесь здесь). Эта ошибка может быть проще всего исправить при указании каталога javac на /usr/bin/javac, но лучшего решения? Когда я запускаю его с помощью sudo, я получил ту же ошибку licuuc.

    R CMD javareconf -e LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_LD_LIBRARY_PATH
    
    Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")'
    
    Unable to locate an executable at "/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/javac"
    (-1)
        make[2]: *** [org/rosuda/JRI/Rengine.class] Error 2
        make[1]: *** [src/JRI.jar] Error 2
        make: *** [jri] Error 2
        ERROR: compilation failed for package ‘rJava’
    
  • После удаления Anaconda conda install anaconda-clean; anaconda-clean --yes; rm -rf ~/anaconda, наведите здесь и установите R с помощью cask таким образом, чтобы brew cask install r-app; sudo R CMD javareconf; Rscript -e 'install.packages("rJava", repos="http://rforge.net", type="source")', чтобы получить новая ошибка

    clang: error: unsupported option '-fopenmp'
    make[2]: *** [libjri.jnilib] Error 1
    make[1]: *** [src/JRI.jar] Error 2
    make: *** [jri] Error 2
    ERROR: compilation failed for package ‘rJava’
    

Что может вызвать эту ошибку forenmp без Anaconda и как ее исправить?

Ответ 1

Я предоставляю решение двумя способами: Anaconda и Brew. Я предлагаю вам использовать решение Brew. В обоих случаях у меня установлен Oracle JDK, и если вы это сделаете, запомните перенастройку Java для R с помощью sudo R CMD javareconf.

Anaconda (решение ошибки licuuc)

Аналогичная ошибка компоновщика произошла здесь. Путь анаконды разрушает вещи как

$ R CMD config --ldflags
  -L/Users/osx/anaconda3/lib/R/lib -lR -lpcre -llzma -lbz2 -lz -lm -liconv -licuuc -licui18n

то удалите путь, как показано ниже: ~/.bash_profile

export PATH="/Users/osx/anaconda3/bin:$PATH" #Removed to install rJava

поэтому мы должны получить что-то вроде

$ R CMD config --ldflags
  -F/Library/Frameworks/R.framework/.. -framework R -lpcre -llzma -lbz2 -lz -licucore -lm -liconv

и после этого rJava может быть установлен даже с Anaconda с

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

поздравления!

Brew (решение для ошибки fopenmp)

Ваша установка R должна быть выполнена с помощью контейнера Homebrew, чтобы

brew cask install r-app

где Brew r пакет недостаточно для этого. Вскоре проблема forenmp заключается в том, что в компиляторе отсутствует флаг, поэтому мы должны перекомпилировать компилятор. Это решение объяснено более подробно здесь. Проблема в этом вопросе заключается в использовании решения 3.3. * R и gcc, для которого

#xcode-select --install #if Xcode commandline tools not installed
brew install homebrew/versions/gcc49 --without-multilib #Long ~70min compiling...
sudo chown -R $(whoami):admin /usr/local
brew link --overwrite --force gcc49
brew unlink gcc49 && brew link gcc49
brew install llvm
mkdir ~/.R; touch ~/.R/Makevars

echo "VER=-4.9 
CC=gcc$(VER)
CXX=g++$(VER)
CXX1X=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/4.9.3/lib/gcc/4.9" > ~/.R/Makevars

и теперь

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

и теперь rJava работает!

Решения, упомянутые здесь также в следующем из-за аналогичных задач