Mac OS X R错误“ld:警告:找不到选项的目录”

时间:2016-03-14 23:16:55

标签: r macos gcc fortran gfortran

我正在尝试从源代码安装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中编译有关,并通过更新项目设置来解决,这在这里不适用。

7 个答案:

答案 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 answerthis 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 -文件。

希望这对其他人有帮助。