时隔两年更新一下,我已经不确定我这篇回答正不正确了,但我提供一个新的解决方案,可以先尝试这个
先用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包,并开始安装,如下图:
然而,安装时出现了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上
由于我们下载的是源代码形式的包,编译这一步需要我们自己完成,而clang主要负责编译时的前端工作,如下图:
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