我正在尝试在 OS X 10.11.6 和 R 版本 3.4.0 上安装 rJava 包:
install.packages("rJava", type = "source")
我收到以下错误:
clang -o libjri.jnilib Rengine.o jri.o Rcallbacks.o Rinit.o globals.o rjava.o -dynamiclib -framework JavaVM -fopenmp -L/usr/local/lib -F/Library/Frameworks/R.framework/.. -framework R -lpcre -llzma -lbz2 -lz -licucore -lm -liconv
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’
据我所知,clang 被用作编译器,使用 clang 似乎不支持的“fopenmp”。任何人都可以找到解决这个问题的方法,可能会强制使用不同的编译器吗? (注:我对编译器几乎一无所知)
提前致谢。
最佳答案
这是因为 R 3.4.0 是由 CRAN 使用 llvm-4.0.0(支持 OpenMP)编译的,但 Apple 的 fork(默认安装在 macOS 上)不支持 OpenMP。三种解决方案
- 使用 CRAN 提供的二进制包,例如
install.packages(type = "binary")
. - 安装支持 OpenMP 的编译器,例如来自 hombrew 的 gcc 或 clang,但是您还必须修改个人 makevars 文件 (
~/.R/Makevars
) 中的变量。 - 取消设置
SHLIB_OPENMP_CFLAGS
和SHLIB_OPENMP_CXXFLAGS
在你的~/.R/Makevars
对于 2. 您可以使用 brew install llvm
安装编译器或 brew install gcc --without-multilib
那么您必须将编译器路径添加到您的 ~/.R/Makevars
文件。
CC=/usr/local/opt/llvm/bin/clang
CXX=/usr/local/opt/llvm/bin/clang++
# Also potentially CXX11 (for C++11 compiler)
CXX11=/usr/local/opt/llvm/bin/clang++
或 gcc
使用(仔细检查 gcc 可执行文件是否存在并正确命名)
CC=/usr/local/bin/gcc-7
CXX=/usr/local/bin/gcc-7
# Also potentially CXX11 (for C++11 compiler)
CXX11=/usr/local/bin/gcc-7
或者您可以安装 CRAN Provided LLVM 4.0并设置 Makevars
适当归档。
对于 3. 您只需要取消设置 SHLIB_OPENMP_CFLAGS
SHLIB_OPENMP_CFLAGS=
SHLIB_OPENMP_CXXFLAGS=
有关详细信息,请参阅 OpenMP support在编写 R 扩展中。
请注意,此错误与 Java 或 rJava 包无关,因此理想情况下可以将问题重命名为 clang: error: unsupported option '-fopenmp'
.
关于java - 用于安装 R 包的备用编译器 : clang: error: unsupported option '-fopenmp' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43595457/