安装需要编译的R包时报错(llvm/clang)

时隔两年更新一下,我已经不确定我这篇回答正不正确了,但我提供一个新的解决方案,可以先尝试这个

先用brew把llvm更新一下,然后再用下面的方法

To use the bundled libc++ please add the following LDFLAGS:

    LDFLAGS="-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib"

llvm is keg-only, which means it was not symlinked into /usr/local, because macOS already provides this software and installing another version in parallel can cause all kinds of trouble. 

If you need to have llvm first in your PATH, run:

    echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc

For compilers to find llvm you may need to set:

    export LDFLAGS="-L/usr/local/opt/llvm/lib"

    export CPPFLAGS="-I/usr/local/opt/llvm/include"


本篇文章运行的环境是macOS Mojave

但本质问题应该都是Clang的问题

关于Non-zero exit status这个报错,其实它只是一个代指,而且后面我们会看到它的开头是Warning,这也提示这不是错误的最关键因素,一般关键的因素是Error开头,如Clang的报错

当我们在R上想安装一些包的时候,原网址只提供源代码形式的包供我们下载,下载后需要自行安装,例如下图:

源代码形式的包

我们输入yes后,R会自动下载源代码形式的R包,并开始安装,如下图:

下载R包

然而,安装时出现了clang: error: unsupported option '-fopenmp' 以及 Warning messages:1: In install.packages(pkgs = doing, lib = lib, ...) : installation of package ‘Rsamtools’ had non-zero exit status

如下图:

clang和non-zero exit status的报错

这里的本质问题出在clang上

由于我们下载的是源代码形式的包,编译这一步需要我们自己完成,而clang主要负责编译时的前端工作,如下图:

Clang和LLVM

Apple的Clang貌似是出了什么问题,或者与R不兼容之类的,我也不甚清楚,反正就是用不了了,要重新下载一个Clang提供给R来使用。

用Brew下载LLVM(其中包含Clang)

brew install llvm

将新下载好的Clang贴一个软链接给原有的Clang

这一步相当于将原有的Clang替换成我们下载好的Clang

ln -s /usr/local/opt/llvm/bin/clang /usr/local/bin/clang

ln -s /usr/local/opt/llvm/bin/clang++ /usr/local/bin/clang++

老规矩,llvm/bin/clang或者llvm/bin/clang++前面的路径是你自己电脑里llvm所在的文件夹

ln -s [新的clang所在位置] [老的clang所在位置]

注意,这里clang和clang++都需要替换成新下载的,以防不测

写一个Makevars的文件

这一步比较玄学,但必不可少

mkdir ~/.R

cd .R

vim Makevars

这三步的意思就是

1、在目录里(一般都是最大的那个apple的文件夹)创建一个.R的文件夹

2、转到这个.R的文件夹

3、用vim编辑器写一个文件

文件内容如下:

CC=/usr/local/clang/bin/clang

CXX=/usr/local/clang/bin/clang++

LDFLAGS=-L/usr/local/clang/lib

老规矩,这里的路径都是因个人电脑而异,基本任务就是找到clang、clang++(这两个我们在上一步都找到了)、以及lib这个文件夹

Vim的使用方法我过会再写一篇,包括brew的安装与使用

最后一步:把clang中bin的文件夹写到环境变量中

在apple这个文件夹中找到bash_profile这个文件

bash_profile这个文件是隐藏文件,需要用快捷键Shift+Command+. 这三个按键来显示

点开后在最后一行加入如下代码:

export PATH="/usr/local/Cellar/llvm/8.0.0/bin:$PATH"

最后一切就都解决了

由于我对电脑和编程本身一窍不通,以上都是Google了其他人的做法后,翻译或者整理过来的。

参考链接:

https://www.cnblogs.com/flipped/p/9033023.html

https://github.com/velocyto-team/velocyto.R/issues/2

你可能感兴趣的:(安装需要编译的R包时报错(llvm/clang))