我正在尝试从源代码安装R包,但收到错误:
* installing *source* package ‘mclust’ ...
** package ‘mclust’ successfully unpacked and MD5 sums checked
** libs
gfortran-4.8 -fPIC -g -O2 -c mclust.f -o mclust.o
gfortran-4.8 -fPIC -g -O2 -c mclustaddson.f -o mclustaddson.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o mclust.so mclust.o mclustaddson.o -L/Library/Frameworks/R.framework/Resources/lib -lRlapack -L/Library/Frameworks/R.framework/Resources/lib -lRblas -L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2 -lgfortran -lquadmath -lm -L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2 -lgfortran -lquadmath -lm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
ld: warning: directory not found for option '-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2'
ld: warning: directory not found for option '-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2'
ld: library not found for -lquadmath
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mclust.so] Error 1
ERROR: compilation failed for package ‘mclust’
* removing ‘/Library/Frameworks/R.framework/Versions/3.3/Resources/library/mclust’
Warning in install.packages :
installation of package ‘mclust’ had non-zero exit status
我没有/usr/local/lib/gcc/x86_64-apple-darwin13.0.0
,因此无法找到它。我有/usr/local/lib/gcc/i686-apple-darwin11
和/usr/local/lib/gcc/4.8
(符号链接到Homebrew安装)。从x86_64-apple-darwin13.0.0
到哪里?
网上有很多类似错误的引用。但是,所有这些都与在Xcode中编译有关,并通过更新项目设置来解决,这在这里不适用。
答案 0 :(得分:13)
您需要修改business/migrations/initial_0001.py
文件。有关详细信息,请参阅:https://cran.r-project.org/doc/manuals/r-release/R-admin.html#OS-X-packages
或者,@ {kevin-ushey在Rcpp warning: "directory not found for option '-L/usr/local/Cellar/gfortran/4.8.2/gfortran'"中更深入地回答了这个问题。
正在发生的事情是您的代码未在~/.R/Makevars
下运行,而是转发到gcc
您需要使用以下内容将clang
中的编译语句更改为~/.R/Makevars/
gcc
这假设您已经通过以下网址安装了VER=-5.3.0
CC=gcc$(VER)
CXX=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/5.3.0/lib/gcc/5
:
gcc
(gfortran现在正在酿造gcc)
答案 1 :(得分:9)
从http://thecoatlessprofessor.com/programming/rcpp-rcpparmadillo-and-os-x-mavericks-lgfortran-and-lquadmath-error/开始,您可以通过从http://r.research.att.com/libs/下载可选的gfortran库并解压缩来解决此问题。要在命令行上执行此操作
curl -O http://r.research.att.com/libs/gfortran-4.8.2-darwin13.tar.bz2
sudo tar fvxz gfortran-4.8.2-darwin13.tar.bz2 -C /
答案 2 :(得分:3)
将以前的解决方案与注释中的其他帮助结合在一起,以下解决方案在Mac OS X High Sierra上对我有用。
使用以下内容创建/编辑~/.R/Makevars
:
VER=-8
CC=gcc$(VER)
CXX=g++$(VER)
CXX11=g++$(VER)
CXX14=g++$(VER)
CXX17=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/8.2.0/lib/gcc/8
注意,我正在使用自制软件,并安装了gcc版本8.2.0。
答案 3 :(得分:2)
我在MAC上收到了相同的错误。我需要做的就是从https://cran.r-project.org/bin/macosx/tools/安装gfortran-6.1.pkg。确保该软件包安装在/usr/local/gfortran
下,以便R可以找到它。
或者,您也可以通过在终端机中输入自制软件brew cask install gfortran
来安装它(它可能会要求您输入密码)。
答案 4 :(得分:2)
我正在MacOS Mojave(10.14.5)和R 4.0.0上工作。这里的问题是“ CRAN R 4.0.0和更高版本不再使用任何自定义编译器”(请参见here),因此Makevars
解决方案似乎不再起作用。
对我来说,解决方案是从official R-Project网站下载并安装GNU Fortran编译器。请注意,您还将需要Xcode和Xcode命令行工具。
使用默认设置运行安装程序后,gfortran代码的编译可以正常进行。
答案 5 :(得分:0)
我安装的是Mac OS Catalina,在我安装Homebrew的情况下,最新的gcc和Gfortran 8.2.0解决了该问题。
答案 6 :(得分:0)
就我而言,我将 this answer 与 this one 结合使用,以在 ~./R/.Makevars
文件中生成以下代码。
touch ~./R/.Makevars
(因为那里不存在)
open -a BBEdit ~./R/.Makevars
(我使用 BBEdit
作为文本编辑器)
在 Makevars
文件中添加了以下几行:
VER=-11
CC=gcc$(VER)
CXX=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
# FLIBS=-L/usr/local/Cellar/gcc/11.1.0_1/lib/gcc/11
# FLIBS = -L`gfortran -print-file-name=libgfortran.dylib | xargs dirname`
FLIBS=`gfortran -print-search-dirs | grep ^libraries: | sed 's|libraries: =||' | sed 's|:| -L|g' | sed 's|^|-L|'`
这两行是@KevinUshy建议的。
# FLIBS=-L/usr/local/Cellar/gcc/11.1.0_1/lib/gcc/11
# FLIBS = -L`gfortran -print-file-name=libgfortran.dylib | xargs dirname`
我将这些注释掉了,因为我认为最后一行可能效果最好。
两个注意事项。
我已经安装了 brew
,并且我使用 brew
使用命令 gcc
安装了 brew install gcc
。
我使用 brew info gcc
找出了版本命名,它给了我 11.1.0_1
,但它链接为 gcc-11
,所以 VER=-11
中的 .Makevars
-文件。
希望这对其他人有帮助。