为什么我在升级到OSX Yosemite后无法使用gfortran进行编译?gfortran错误:libgfortran.spec:没有这样的文件或目录。

3
自从升级到Yosemite后,我无法使用gfortran进行编译。最初出现了“segmentation fault 11”错误,然后我:
  1. http://hpc.sourceforge.net/更新到gcc v.5.0
  2. 重新安装Xcode命令行工具v.6.1.1
在完成上述步骤后,我能够编译非常简单的Fortran程序,但是运行更复杂的代码时会出现以下错误:
 gfortran: error: libgfortran.spec: No such file or directory

但实际上,libgfortran.spec文件位于/usr/local/lib目录下。
 ls /usr/local/lib | grep gfortran

 libgfortran.3.dylib
 libgfortran.a
 libgfortran.dylib
 libgfortran.la
 libgfortran.spec

所有的gcc二进制文件都位于 /usr/local/bin 中。

 which gfortran

 /usr/local/bin/gfortran

我的路径似乎没问题

 echo $PATH
 /usr/local/lib:/usr/local/bin:/usr/local:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/lib:/usr/texbin:/Users/MattCooper/bin:/Applications/MRT/bin

我也尝试使用Homebrew重新安装gcc:
 brew install gcc
 Error: gcc-4.9.2 already installed
 To install this version, first 'brew unlink gcc'

然而,当我询问'gcc --version'时,我得到的是5.0版本:

 gcc --version
 gcc (GCC) 5.0.0 20141005 (experimental)

当我尝试使用Homebrew取消链接或升级gcc时,出现了权限被拒绝的错误:
 brew unlink gcc
 Unlinking /usr/local/Cellar/gcc/4.9.2... Error: Permission denied - /usr/local/bin/c++-4.9

同样地
 brew upgrade gcc
 Permission denied - /usr/local/bin/c++-4.9

最终
 which gcc
 /usr/local/bin/gcc

请帮忙。非常感谢您的帮助。请告诉我漏掉了什么。

涉及IT技术。
2个回答

4
我最终通过Homebrew解决了这个问题。我无法确定问题的确切来源,但与我从http://hpc.sourceforge.net/安装了gcc v4.9有关,然后在某个时候我使用Homebrew重新安装和/或更新了gcc。然后,在升级到Yosemite之后,我从http://hpc.sourceforge.net/安装了gcc v5。在此过程中,在/usr/local/bin和usr/local/lib中的二进制文件没有正确连接是问题的关键。

主要线索是尝试运行'brew upgrade gcc'时出现的“权限被拒绝”错误。我在这里找到了一个解决方案:Brew doctor says: "Warning: /usr/local/include isn't writable."

为了解决问题,我使用了:

 brew doctor

这段内容涉及IT技术,需要翻译成中文。其中提到了一些不可写的目录,例如usr/local/lib,导致brew无法升级gcc到v5.0并链接所有内容。

我进行了以下操作:

 sudo chown -R $USER /usr/local

我对所有其他不可写目录执行了“brew doctor”返回的操作。然后,我就可以使用brew升级gcc了:

 brew upgrade gcc

在升级过程中,Homebrew返回了一个错误,指出无法完成升级,因为已经存在一个位于以下位置的gfortran文件:

 /usr/local/bin/gfortran

为了解决这个问题,Homebrew 建议我运行以下命令:

 brew -link gcc

在这一点上,一切都运行正常。有趣的是(对我来说,因为我不完全理解所有这些),当我要求brew清理东西时,我会收到以下信息:

 brew cleanup
 Warning: Skipping (old) /usr/local/Cellar/gcc/4.9.2 due to it being linked

这里有一些类似的信息: 如何使用brew链接到新的gcc版本?

像那个用户一样,当我查看我的cellar时,我发现有两个版本的gcc,但我不确定我是否需要两个。

 ls /usr/local/Cellar/gcc
 4.9.2 4.9.2_1

1

我遇到了类似的问题,并找到了相应的解决方案。它无法找到此文件:

gfortran: error: libgfortran.spec: No such file or directory

所以我的问题是,我通过hpc.sourceforge.net和homebrew安装了gcc。我不得不卸载homebrew版本。
brew uninstall gcc

然后我不得不从hpc.sourceforge.net重新安装gcc。

sudo tar -xvf gcc-4.9-bin.tar.gz -C /

当我想从hpc.sourceforge.net回退到gcc 4.9时,这对我很有用,使用的操作系统是Yosemite。


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