RJava на MacOS Sierra 10.12.15: неподдерживаемая опция fopenmp

Я пытаюсь установить rJava на MacOS Sierra. Нужно попробовать советы и руководства в других местах для других MacOS, таких как https://github.com/snowflakedb/dplyr-snowflakedb/wiki/Configuring-R-rJava-RJDBC-on-Mac-OS-X и установить xlsx и rJava на Mac

но это не сработает. Очень ценю любую помощь. Благодарю.

Версия для моего Mac: macOS Sierra, версия 10.12.15 Версия для моего R: 3.4.0 (2017-04-21) Версия для моего Rstudio: Версия 0.99.903

Версия Java:

bash-3.2$ /usr/libexec/java_home -V
bash-3.2$ 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)


bash-3.2$ 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
clang -I/Library/Frameworks/R.framework/Resources/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/usr/local/include   -fPIC  -Wall -g -O2  -c conftest.c -o conftest.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -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 /Library/Frameworks/R.framework/Resources
override rw-r--r--  root/admin for /Library/Frameworks/R.framework/Resources/etc/Makeconf? (y/n [n]) n
not overwritten
override rw-r--r--  root/admin for /Library/Frameworks/R.framework/Resources/etc/ldpaths? (y/n [n]) n
not overwritten
Done.

Когда я попытался установить rJava, я запустил

'R --quiet -e 'install.packages("rJava", type="source", repos="http://cran.us.r-project.org")' 

Я получил ошибки:

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
* removing ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava
* restoring previous ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava

The downloaded source packages are in
    ‘/private/var/folders/w8/ksbj8dh15bz2lkss7h2tpzk80000gn/T/Rtmp6r9HI0/downloaded_packages
Warning message:
In install.packages("rJava", type = "source", repos = "http://cran.us.r-project.org") :
  installation of package ‘rJava had non-zero exit status

Я побежал:

"curl -#ROL https://www.rforge.net/rJava/snapshot/rJava_0.9-8.tar.gz
R CMD INSTALL rJava_0.9-8.tar.gz"

и получил следующие сообщения об ошибках:

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

* removing ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava
* restoring previous ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava

Я не знаю что делать. Спасибо за вашу помощь.

Ответ 1

Эта статья здесь решила эту проблему с fopenmp для меня на macOS Sierra 10.12.4. Я изложил решение здесь, но также ниже. Проблема в том, что опция forenmp не поддерживается в macOS gcc, поэтому мы должны скомпилировать новую версию gcc.


Решение проблемы forenmp

Я тестировал это с помощью Homerew r-app brew cask install r-app и Oracle JDK. Затем я сделал следующее

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!

Ответ 2

Взгляните сюда:

http://www.owsiak.org/?p=3671

Вы можете найти довольно подробное описание того, как обращаться с rJava в macOS.

Обязательно установите JDK, предоставленный Oracle, прежде чем продолжить.

Ответ 3

Комментарии, использующие OSX 10.12.6 с Java 1.8.0_181 и имеющие дело с вышеупомянутой проблемой и другой проблемой, связанной с компиляцией rJava.

Первый:

Установите rJava с этими командами:

wget https://cran.r-project.org/src/contrib/rJava_0.9-10.tar.gz
tar xvfz rJava_0.9-10.tar.gz
cd rJava
R CMD INSTALL rJava

Зачем использовать R CMD INSTALL? Это сохранит файл config.log, который позволит вам отлаживать вещи; install.packages() не помогает и может помочь вам в этом случае может оказаться не очень полезным (например, https://github.com/su/rJava/issues/111).

Во-вторых:

Убедитесь, что вы выполнили следующее, если вы обновили Java (помните, что вам нужен JDK, а не JRE).

sudo R CMD javareconf

Ошибка (проверка типов данных JNI):

Чтобы исправить эту ошибку:

checking JNI data types... configure: error: One or more JNI types differ from the corresponding native type. You may need to use non-standard compiler flags or a different compiler in order to fix this.

сделай это:

sudo ln -f -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
sudo ln -f -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/

Ошибка (неподдерживаемая опция '-fopenmp):

Чтобы исправить эту ошибку:

clang: error: unsupported option '-fopenmp

сделайте следующее:

Примечание: инструкции могут нуждаться в изменении для более новых версий gcc, но убедитесь, что вы получаете версию больше 7 (см. Примечания ниже); Следующая команда может быть использована для поиска доступных версий:

brew search gcc

Затем установите gcc:

brew install [email protected]
sudo chown -R $(whoami):admin /usr/local
brew link --overwrite --force [email protected]
brew unlink [email protected] && brew link [email protected]
brew install llvm
mkdir -p ~/.R

## Check the versions and folder in FLIBS match what you install
echo "CC=gcc-7
CXX=g++-7
CXX1X=g++-7
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc\@7/7.3.0/lib/gcc/7" > ~/.R/Makevars

Примечания: Вам нужна любая версия GCC больше 7; Флаг без мультибиблиотеки, упомянутый в предыдущем ответе, может быть недоступен, но это важно. Почему флаг без мультибиблиотеки?: https://thecoatlessprofess.com/programming/openmp-in-r-on-os-x/ и OpenMP/gcc в macOS: gcc --without-multilib недоступен

Затем установите rJava

R CMD INSTALL rJava

Наконец, протестируйте библиотеку (вы должны увидеть свою версию Java):

library(rJava)
.jinit()
.jcall("java/lang/System", "S", "getProperty", "java.runtime.version")

Ответ 4

Cannin ответ полезен!

Я могу исправить мою проблему с этим сообщением.

Некоторый код нужно изменить на высокой Сьерре.

cmd sudo chown -R $(whoami):admin/usr/local необходимо sudo chown -R $(whoami) $(brew --prefix)/*

Пожалуйста, проверьте https://github.com/Homebrew/brew/issues/3228