用于安装R软件包的备用编译器:clang:错误:不支持的选项'-fopenmp'

Jef*_*lin 13 java compiler-errors r

我正在尝试使用R版本3.4.0在OS X 10.11.6上安装rJava包:

install.packages("rJava", type = "source")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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’
Run Code Online (Sandbox Code Playgroud)

据我所知,clang被用作编译器,使用'fopenmp',而clang似乎不支持它.任何人都可以看到解决这个问题的方法,可能会强制使用不同的编译器吗?(注意:我对编译器几乎一无所知)

提前致谢.

Jim*_*Jim 24

这是因为[R 3.4.0由CRAN与LLVM-4.0.0(支持OpenMP的)编译造成的,但苹果的叉(默认情况下在Mac OS安装)并没有支持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 llvmbrew 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++
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

或者,您可以安装CRAN提供的LLVM 4.0并正确设置Makevars文件.

对于3.你只需要取消设置 SHLIB_OPENMP_CFLAGS

SHLIB_OPENMP_CFLAGS=
SHLIB_OPENMP_CXXFLAGS=
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅编写R扩展中的OpenMP支持.

请注意,此错误与Java或rJava包无关,因此理想情况下可以将问题重命名为clang: error: unsupported option '-fopenmp'.

  • 默认情况下没有一个,如果不存在,你需要创建`〜/ .R /`目录和`Makevars`文件. (3认同)