java - 用于安装 R 包的备用编译器 : clang: error: unsupported option '-fopenmp'

标签 java r compiler-errors

我正在尝试在 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。三种解决方案

  1. 使用 CRAN 提供的二进制包,例如install.packages(type = "binary") .
  2. 安装支持 OpenMP 的编译器,例如来自 hombrew 的 gcc 或 clang,但是您还必须修改个人 makevars 文件 ( ~/.R/Makevars ) 中的变量。
  3. 取消设置 SHLIB_OPENMP_CFLAGSSHLIB_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/

相关文章:

java - Stream<Set<Path>> 到 Set<Path>

java - OWLApi : Failed to create a hermit reasoner instance

html - 使用超链接将 R 中的表格导出到 HTML

asp.net - 如何使用R登录然后从aspx网页下载文件

r - 在 R 中使用表情符号

java - 编程到 'Change color of a circle on click doesn' t 编译

java - 打印低于阈值的动物总数

java - 没有值从 php 返回到 android 应用程序

c - 包含 2 位十六进制值的数组应使用哪种 C 数据类型?

c - .c 源文件消失了,还有希望吗?