[英]Installing gfortran on MacBook with Apple M1 chip for use in R
[英]Installing R on OSX Big Sur (EDIT: and Apple M1) for use with Rcpp and openMP
OSX+Rcpp+openMP 上可能有无数个线程,但现在的底线似乎是这个( percoatless ):
不幸的是,在 R 4.0.0 中,R 的 CRAN 分布式版本失去了在没有自定义设置的情况下使用 OpenMP 的能力。
我遇到了其他想法,包括自己编译llvm ,使用homebrew或macports安装 R 和/或 llvm 和/或 gcc,然后弄清楚如何使用正确的编译器和/或带有 (R)cpp 的标志。 然而,我觉得这一切都非常令人困惑。
我不是 mac 用户,但在我看来,设置 mac 以使用 openMP 编译 Rcpp 包或代码片段对于大多数 mac 用户来说似乎太困难了。 但是,我希望我在 github 上的 R 包被更多用户使用,而且由于它依赖于 openMP,我正在失去那些观众。
有人可以提供必要的步骤来在 mac 上设置 R 以使用 openMP 编译 Rcpp 代码吗? 我想把它变成一个快速教程。
编辑:我应该添加 - 在 Apple Silicon 上,因为有一些额外的混乱 - /usr/local
vs /opt
我花了一天的时间来解决这个问题(原帖在这里); 以下是我使用 openMP 从源代码编译 R 包的步骤:
# To delete an existing command line tools installation:
sudo rm -rf /Library/Developer/CommandLineTools
# To install the command line tools
sudo xcode-select --install
# WARNING: This can take several hours
brew install gcc
brew cleanup
brew update
brew upgrade
brew reinstall gcc
sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/
# You can ignore warnings like this:
#ln: /usr/local/include//tcl.h: File exists
#ln: /usr/local/include//tclDecls.h: File exists
#ln: /usr/local/include//tclPlatDecls.h: File exists
#ln: /usr/local/include//tclTomMath.h: File exists
#ln: /usr/local/include//tclTomMathDecls.h: File exists
#ln: /usr/local/include//tk.h: File exists
#ln: /usr/local/include//tkDecls.h: File exists
#ln: /usr/local/include//tkPlatDecls.h: File exists
cd /usr/local/gfortran/lib/gcc/x86_64-apple-darwin19/; ls
)然后编辑您的~/.R/Makevars
文件(如果您的文件中没有名为Makevars
的文件) ~/.R/
目录)并仅包含以下~/.R/
行:LOC = /usr/local/gfortran
CC=$(LOC)/bin/gcc -fopenmp
CXX=$(LOC)/bin/g++ -fopenmp
CXX11 = $(LOC)/bin/g++ -fopenmp
CFLAGS=-g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe
CXXFLAGS=-g -O3 -Wall -pedantic -std=c++11 -mtune=native -pipe
LDFLAGS=-L$(LOC)/lib -Wl,-rpath,$(LOC)/lib
CPPFLAGS=-I$(LOC)/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
# (check that the version of gfortran - in this case 10.2.0 - matches the version specified in FLIBS)
FLIBS=-L/usr/local/gfortran/lib/gcc/x86_64-apple-darwin19/10.2.0 -L/usr/local/gfortran/lib -lgfortran -lquadmath -lm
CXX1X=/usr/local/gfortran/bin/g++
CXX98=/usr/local/gfortran/bin/g++
CXX11=/usr/local/gfortran/bin/g++
CXX14=/usr/local/gfortran/bin/g++
CXX17=/usr/local/gfortran/bin/g++
install.packages("data.table")
不幸的是,我不相信存在更“简单”的设置。
最终,我找到了一个可以在带有 Big Sur 的M1 mac上运行的过程。
R-4.1-branch.pkg
下载并安装 R。 CRAN 版本也可能工作,但我使用了来自 mac.r-project.org 的安装程序,这需要打开osx 安全设置以允许安装。sudo xcode-select --install
。openmp-11.0.1-darwin20-Release.tar.gz
并安装它(参见下面的终端命令)。curl -O https://mac.r-project.org/openmp/openmp-11.0.1-darwin20-Release.tar.gz
sudo tar fvx openmp-11.0.1-darwin20-Release.tar.gz -C /
Makevars
文件。cd ~
mkdir .R
nano .R/Makevars
在 nano 中,将这些额外的编译器标志粘贴到Makevars
文件中:
CPPFLAGS += -Xclang -fopenmp
LDFLAGS += -lomp
按 Control+O、Control+X 保存并关闭
gfortran-ARM-11.0-BigSur.pkg
安装 gfortran 。/usr/local/gfortran
,但 R 期望它安装在/opt
。 mac-R 团队喜欢将 arm64 和 intel 相关文件分开。 我们可以去修复路径,或者简单地在/opt
下安装 gfortran。 下载 tar 文件gfortran-ARM-11.0-BigSur.tar.xz
。 您可以使用 curl,或者只是下载它并在命令行中将 tar 指向它。cd /opt/R/arm64/
sudo mkdir gfortran
sudo tar -xzyf gfortran-ARM-11.0-BigSur.tar.xz -C /opt/R/arm64/
(用gfortran-ARM-11.0-BigSur.tar.xz
替换gfortran-ARM-11.0-BigSur.tar.xz
/users/YOURUSERNAME/downloads/gfortran-ARM-11.0-BigSur.tar.xz
)
现在它应该可以工作了。
不是 OSX 专家,但这样做是为了让其他人可以弄清楚如何使用我的 R 包。 我想进一步简化这个过程,但是擦拭 mac、重新安装 osx 并测试它需要很多时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.