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

我正在尝试使用R版本3.4.0在OS X 10.11.6上安装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被用作编译器,使用’fopenmp’,而clang似乎不支持它。 任何人都可以看到解决这个问题的方法,可能会强制使用不同的编译器吗? (注意:我对编译器几乎一无所知)

提前致谢。

这是因为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. ~/.R/Makevars取消设置SHLIB_OPENMP_CFLAGS~/.R/Makevars

对于2.您可以使用brew install clangbrew 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提供的LLVM 4.0并适当地设置Makevars文件。

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

 SHLIB_OPENMP_CFLAGS= SHLIB_OPENMP_CXXFLAGS= 

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

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

在终端中运行以下命令也可以修复RStudio中的包下载,您可以毫无问题地运行Rjava或r-app。

  brew cask install r-app brew install homebrew/versions/gcc49 --without-multilib 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