Java 用于安装R软件包的替代编译器:clang:error:unsupported选项'-fopenmp';

Java 用于安装R软件包的替代编译器:clang:error:unsupported选项'-fopenmp';,java,r,compiler-errors,Java,R,Compiler Errors,我正在尝试在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版本为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似乎不支持它。有没有人能找到一种方法来解决这个问题,可能会强制使用不同的编译器?(注意:我对编译器几乎一无所知)


提前感谢。

这是因为CRAN使用llvm-4.0.0(支持OpenMP)编译了R3.4.0,但苹果的fork(默认安装在macOS上)不支持OpenMP。有三种解决方案

  • 使用CRAN提供的软件包二进制文件,例如
    install.packages(type=“binary”)
  • 安装一个确实支持OpenMP的编译器,例如来自hombrew的gcc或clang,但是您还必须修改个人makevars文件中的变量(
    ~/.R/makevars
  • ~/.R/Makevars中取消设置
    SHLIB\u OPENMP\u CFLAGS
    SHLIB\u OPENMP\u cxflags
  • 两个人。您可以使用
    brew install llvm
    brew install gcc安装编译器--而不使用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可执行文件是否存在并正确命名)

    或者,您可以安装并适当设置
    Makevars
    文件

    三个人。您只需取消设置
    SHLIB\u OPENMP\u CFLAGS

    SHLIB_OPENMP_CFLAGS=
    SHLIB_OPENMP_CXXFLAGS=
    
    有关更多详细信息,请参阅编写R扩展


    请注意,此错误与Java或rJava软件包无关,因此理想情况下,问题可以重命名为
    clang:error:unsupported option'-fopenmp'
    在终端中运行following也可以修复在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
    

    我的个人makevars文件在哪里有线索吗
    $cd~/.R/Makevars-bash:cd:/Users/me/.R/Makevars:没有这样的文件或目录
    默认情况下没有,您需要创建
    ~/.R/
    目录和
    Makevars
    文件(如果不存在)。
    R--quiet-e'install.packages(“rJava”,type=“binary”,repos=”http://cran.us.r-project.org")“
    从命令行为我获得了它。版本2。“叮当”对我不起作用。但是版本3。做
        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