Mac OS X中的R错误“ld:warning:directory not found for option”

28

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


"Official R Core" 不支持 Homebrew 安装。在 http://r.research.att.com/ 上有一个 Fortran 包,但我认为它可能与最终出现在 Frameworks 树中的“授权”版本进行了静态链接。我不是这个领域的专家,有一些 SO 的用户(想到 @hrbrmstr)认为 homebrew 是“完全没问题”的。搜索“user:1457051 homebrew”,看看是否有比我更多的支持。 - IRTFM
CRAN使用的当前版本的clang和gfortran可以在此处找到:https://cran.r-project.org/bin/macosx/tools/ - IRTFM
13个回答

0

对于 R 的较新版本(R 4.0 及更高版本)和较新的操作系统,解决此问题的推荐方法似乎是通过 rtools 安装 gfortran(请参见 这里,已在 @lks_swrx 的答案中提到)。

按照这些说明时,我遇到了一个额外的问题,因为我的电脑使用苹果芯片(不再是英特尔),所以我想在这里添加一个解决方案:

  1. rtools 下载适当的 gfortran tarball
  2. 运行 tar fxz gfortran-12.0.1-20220312-is-darwin20-arm64.tar.xz -C /
  3. 通过将以下行添加到您的 .zshrc 文件中将其添加到您的路径中:
    nano .zshrc(或任何您用作文本编辑器的工具)
    export PATH=$PATH:/opt/R/arm64/gfortran/bin

到目前为止,一切都很好;但是我来到这里的安装DESeq2仍然没有成功,因为R找不到库。以下是解决方法:

  1. /usr/local中创建一个指向gfortran库的符号链接,以便R可以找到它:
    ln -s /opt/R/arm64/gfortran /usr/local/gfortran(可能需要sudo

0
在macOS 12.4上使用R时遇到了问题。这是由于我的~/.R/Makevars文件中存在旧的和过时的条目所致。一旦我将所有内容都注释掉,一切都编译得很好。我已经安装了XCodebrew install gcc

0
挖掘这个话题,如果你尝试了这些和其他与此错误相关的方法,但没有成功,我强烈建议你检查一下你的 OSx - 以防万一 - 是否删除了 .zshrc 文件。
如果是这种情况,你应该在根目录中重新创建这个文件,在终端中输入以下命令:
  • touch .zshrc
然后输入以下命令:
  • openssl_prefix=$(brew --prefix openssl) printf "CFLAGS=-I$openssl_prefix/include \nLDFLAGS=-L$openssl_prefix/lib"
输出示例:
  • CFLAGS=-I/usr/local/opt/openssl@3/include LDFLAGS=-L/usr/local/opt/openssl@3/lib
将它们添加到 zshrc 文件内容中,运行
  • source .zshrc 以刷新文件,就这样!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接