早先升级 macOS10.15 电脑 SMC 出了一些问题,试了一些方法都没有解决,无奈只能继续升级到public beta 版本。
目前的版本信息如下 10.15.1 beta 版本
ProductBuildVersion
19B86a
ProductCopyright
1983-2019 Apple Inc.
ProductName
Mac OS X
ProductUserVisibleVersion
10.15.1
ProductVersion
10.15.1
iOSSupportVersion
13.2
升级了之后 R 下的很多需要编译的软件都用不了了。
原因之一是系统自带的 clang 不支持 -fopenmp,这个需要在 R 官网下载安装 LLVM 预先编译好的 clang 7 。我也尝试过跳过这个 R 官网提供的 clang7,直接通过安装 LLVM 来安装最新版的 clang7.1,但是在 10.15 的系统里直接通过 brew install llvm
也会有不少问题,于是放弃。
除此之外还需要安装 gfortran , 如果去官方安装最新的版本在编译过程中会报 warning。因为 R 提供的 clang7 用的是 gfortran 6.1。这个还是需要去 R 官网提供的链接进行下载。
首先确认自己装了 Xcode command line tools (XCode CLI)
$ xcode-select -p
/Library/Developer/CommandLineTools
如果你之前有旧版本的 gfortran 和 clang 最新好先删除一些文件
# Delete the clang6 binary
sudo rm -rf /usr/local/clang6
# Delete the prior version of gfortran installed
sudo rm -rf /usr/local/gfortran
sudo rm -rf /usr/local/bin/gfortran
# Remove the gfortran install receipts (run after the above commands)
sudo rm -rf /private/var/db/receipts/com.gnu.gfortran.bom
sudo rm -rf /private/var/db/receipts/com.gnu.gfortran.plist
然后安装 clang7 和 gfortran6.1。下载地址:https://cran.r-project.org/bin/macosx/tools/
如果在 10.14 里,这两个装好了后指定 clang7 的路径基本就解决问题。
但是 macOS 10.15 之后 usr 目录下无法新建 include 文件,这就导致clang 在运行的时候可能使用默认的位置找不到sdk目录。
这个坑还需要再进行一些配置。首先要找到实际的 sdk 目录:
$ xcrun --show-sdk-path
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
然后在 R 的~/.R/Makevars
配置文件中指定一些compilation flags,通过 -isysroot
定义 sdk。如果你发现自己没有这个文件,就新建一个即可。
CFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
CCFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
CXXFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
CPPFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include
最后在 ~/.Renviron 里写好clang7的路径。按道理这个路径写在 zshrc 里也是可以的,但这边测试的时候 Rstudio 启动 R 还是识别的系统默认 clang。
PATH="/usr/local/clang7/bin:${PATH}"
这些配置写好之后,可以在 R 里通过从 source 装两个软件测试一下。
install.packages(c("Rcpp", "RcppArmadillo", "data.table"), type = "source")
最后的最后,一般情况下或者新手建议不要从 source 去安装软件,就没有任何烦恼了。