【问题标题】:Mac OS X R error "ld: warning: directory not found for option"Mac OS X R 错误“ld:警告:找不到选项的目录”
【发布时间】:2016-06-30 05:16:05
【问题描述】:

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

【问题讨论】:

  • “官方 R Core”不支持 Homebrew 安装。 r.research.att.com 有一个 Fortran 包,但我认为它可能与最终在框架树中的“授权”版本有静态链接。我不是这方面的专家,并且有一些 SO 用户(想到@hrbrmstr)认为自制软件“很好”。搜索“user:1457051 homebrew”,看看你是否找到了比我提供的更多支持。
  • CRAN 使用的当前版本的 clang 和 gfortran 可以在这里找到:cran.r-project.org/bin/macosx/tools

标签: r macos gcc fortran gfortran


【解决方案1】:

您需要修改~/.R/Makevars 文件。有关这方面的更多概述,请参阅: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'" 中已经更深入地回答了这个问题。

发生的情况是您的代码没有在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

这假设您已经通过 homebrew 安装了gcc:

brew install gcc

(gfortran 现在在 brew 中附带 gcc)

【讨论】:

  • 我已经通过自制软件安装了 gcc,并且我创建了一个 Makevars 文件,但我一直遇到问题,主要是因为我有更新版本的 gcc。我将最后一行更改为FLIBS=-L/usr/local/Cellar/gcc/7.3.0_1/lib/gcc/7,然后将第一行更改为VER=-7.3.0_1(这会导致问题,直到我将其更改为VER=-7)。这实际上可能适用于编译一个 R 包,但现在由于某种原因默认编译器仍然是 clang,我不知道为什么......有什么想法吗??
  • 需要设置隐式变量CXX11、CXX14和CXX17才能像CXX一样使用g++$(VER)。这些定义了应该用于每种语言标准的编译器。例如CXX11 是 C++11 标准。
  • 非常感谢您的回复——我真的很感激。现在看来,我可以毫无问题地编译一些包,然后当其他包无法编译时,我最终只是完全注释掉 Makevars 文件,以便我的系统改用 clang ,这似乎主要解决问题。这种特殊的方法正常吗??
  • 为了在今天使用 GCC 10.2.0 进行这项工作,我不得不将第二行更改为 CC=gcc。
【解决方案2】:

在 cmets 的额外帮助下结合以前的解决方案,以下解决方案在 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。

【讨论】:

  • 当编译器找不到 gfortran 的库时,FLIBS 负责人在类似的情况下工作
  • 对于其他遇到同样问题的人来说,这种方法在 MacOS Big Sur 上也适用于我
  • 唉,对于我在 M1 上的 Big Sur 来说,它没有。与对其他答案的评论一样,首先将第二行更改为 CC=gcc 并使用 /opt/homebrew。但是会抛出“检查 g++-10 是否接受 -g ... no configure: error: no C++ compiler found or it cannot create executables”
【解决方案3】:

从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 /

【讨论】:

  • 当我进入第二行时,我得到tar: Unrecognized archive format。我做错了什么?
【解决方案4】:

我有 Mac OS Catalina,在我的情况下安装 Homebrew,最新的 gcc 和 Gfortran 8.2.0 解决了这个问题。

【讨论】:

【解决方案5】:

我在 MAC 上收到了同样的错误。我需要做的就是从https://cran.r-project.org/bin/macosx/tools/ 安装gfortran-6.1.pkg。确保软件包安装在/usr/local/gfortran 下,以便 R 可以找到它。

您也可以通过 homebrew 在终端中输入 brew cask install gfortran 来安装它(它可能会询问您的密码)。

【讨论】:

    【解决方案6】:

    我正在开发 MacOS Mojave (10.14.5) 和 R 4.0.0。这里的问题是“CRAN R 4.0.0 和更高版本不再使用任何自定义编译器”(请参阅​​here),因此Makevars 解决方案似乎不再起作用。

    我的解决方案是从official R-Project 网站下载并安装 GNU Fortran 编译器。请注意,您还需要 Xcode 和 Xcode 命令行工具。

    使用默认设置运行安装程序后,gfortran 代码的编译工作没有问题。

    【讨论】:

      【解决方案7】:

      在我的例子中,我将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 使用命令brew install gcc 安装gcc。

      我使用brew info gcc 找出版本命名,它给了我11.1.0_1,但它链接为gcc-11,所以VER=-11 在.Makevars 文件中。

      希望这对其他人有所帮助。

      【讨论】:

        【解决方案8】:

        解决方案是使用 Homebrew 重新安装有问题的软件包。

        $ brew uninstall --ignore-dependencies --force openssl
        $ brew install openssl
        
        $ brew uninstall --ignore-dependencies --force readline  
        $ brew install readline
        

        【讨论】:

          【解决方案9】:

          我在 Mac 上工作时遇到这个问题很长时间了。按照此页面上的其他答案和其他问题,我做了以下操作,它终于奏效了!

          第 1 步 - brew install gcc(它为我安装了 gcc-11。如果以后对您有所不同,请将下面的 gcc-11 替换为相应的版本。您可以找到版本通过检查文件夹/usr/local/bin 并在那里查看最新的 gcc 版本文件)

          第 2 步 - xcode-select --install(这会安装 Xcode CLI)

          第 3 步 - ln -sf /usr/local/bin/gcc-11 /usr/local/bin/gcc(这会在 /usr/local/bin/ 下创建一个新的 gcc 符号链接。Source)

          第 4 步 - 我没有 ~/.R/Makevars 文件。哎呀,我什至没有~./R 文件夹。制作文件夹和文件。这是我在 Makevars 文件中写的内容(请记住根据您拥有的版本在第一行和最后一行更改 GCC 版本。还记得不要在第一行的最后一行中包含完整的版本号。只是总体版本号 - 在我的情况下为 11) -

          VER=-11
          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/11.2.0_3/lib/gcc/11
          

          现在重新启动,瞧!它有效。

          【讨论】:

          • 刚刚修复了我的 gfortran 问题。
          猜你喜欢
          • 2012-03-16
          • 1970-01-01
          • 1970-01-01
          • 2013-06-08
          • 2019-11-22
          • 1970-01-01
          • 2012-06-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多