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

2022-09-03 10:06:21

我正在尝试在 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似乎不支持它。任何人都可以看到解决这个问题的方法,可能迫使使用不同的编译器?(注意:我对编译器几乎一无所知)

提前致谢。


答案 1

这是因为R 3.4.0是由CRAN使用llvm-4.0.0(支持OpenMP)编译的,但Apple的分叉(默认安装在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 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++

或用于使用(仔细检查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'


答案 2

在终端中运行以下命令也可以修复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

推荐