早先升级 macOS10.15 电脑 SMC 出了一些问题,试了一些方法都没有解决,无奈只能继续升级到public beta 版本。

目前的版本信息如下 10.15.1 beta 版本

        <key>ProductBuildVersion</key>
        <string>19B86a</string>
        <key>ProductCopyright</key>
        <string>1983-2019 Apple Inc.</string>
        <key>ProductName</key>
        <string>Mac OS X</string>
        <key>ProductUserVisibleVersion</key>
        <string>10.15.1</string>
        <key>ProductVersion</key>
        <string>10.15.1</string>
        <key>iOSSupportVersion</key>
        <string>13.2</string>

升级了之后 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 去安装软件,就没有任何烦恼了。


本文作者:思考问题的熊

版权声明:本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。

扫码即刻沟通