尝试使用 gfortran 编译简单的 fortran-90 文件时出现奇怪的错误。我正在开发 macOS mojave 系统。我安装了 gfortran 8.2.0,并通过执行以下操作来检查以确保这一点:
Input: gfortran --version
Output: GNU Fortran (GCC) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
这表明 gfortran 安装正确,我也通过在终端中简单地输入:gfortran 来确认这一点,它返回:
gfortran: fatal error: no input files
compilation terminated.
但是,当我尝试像这样编译我的文件时:
gfortran hello.f90 -o hello.x
我收到一条错误消息:
ld: library not found for -lSystem
collect2: error: ld returned 1 exit status
我尝试过以不同的方式进行编译,并且还尝试按照https://gcc.gnu.org/wiki/GFortranBinaries32Linux所述在.bash_profile中设置LD_LIBRARY_PATH,但我仍然遇到相同的错误。 gfortran 目录的路径名:/usr/local/gfortran,但是可以在 /usr/local/bin 中找到另一个不是目录的 gfortran
打字:
which gfortran
输出:
/usr/local/bin/gfortran
以及该目录的长列表搜索:
Input: ls -l /usr/local/bin/gfortran
Output: lrwxr-xr-x 1 root wheel 32 15 May 14:07
/usr/local/bin/gfortran -> /usr/local/gfortran/bin/gfortran
在一切似乎都已正确安装的情况下,我该如何解决这个问题?
任何帮助将不胜感激!
在 macOS Big Sur v11.1 上:
相关SO帖子:https://apple.stackexchange.com/questions/408999/gfortran-compiler-error-on-mac-os-big-sur
修复方法是将 stdlib 添加到您的
$LIBRARY_PATH
。由于某种原因,它不再属于 11.1 的标准 $PATH
。
export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
(或将其添加到登录文件并重新启动终端)。
我将此添加到我的
~/.profile
:
export SDKROOT=$(xcrun --sdk macosx --show-sdk-path)
export LIBRARY_PATH="$LIBRARY_PATH:$SDKROOT/usr/lib"
而且它有效。
我还要插话(2020 年 12 月 19 日),我刚刚从 MacOS Mojave 更新到 Catalina,突然收到此错误。
它自行解决了
brew reinstall gcc
brew reinstall gfortran
更新:我尝试了建议的方法,并使用 homebrew 从 gcc 包安装了 gfortran 版本,这给了我一个更新版本的 gfortran,我的问题得到了解决!
我遇到了同样的问题,但是使用 homebrew 从 gcc 包安装 gfortran 版本没有帮助。相反,我使用自制程序安装了整个 gcc:
brew install gcc
问题就解决了。
对于那些使用 MacPorts 的人。
# Installed `gcc8` and `gcc_select`
sudo port install gcc_select gcc8
# then to create "gfortran" softlink to "gfortran-mp-8"
sudo port select --set gcc gcc8
# and added to my .profile
export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
我做了
ls -l /Library/Developer/CommandLineTools/SDKs/
,发现 Xcode 已经安装了一个用于 Catalina 的 SDK 和一个用于 Big Sur 的 SDK。我更改了 MacOSX.sdk
的软链接以指向 Catalina 版本。
只需将此行放在 .zshrc 的末尾:
export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
并再次运行我的 Fortran 代码进行编译 – 成功! -lSystem 的问题已在我的 macOS 系统中得到解决。
我遇到了这个问题,我尝试了很多方法来解决该问题,但仅使用这些“两个”命令就解决了它:
brew reinstall gcc
brew reinstall gfortran
我跳入这个旧线程是因为我面临着一个非常相似的问题。我使用的是配备 M1 Max 处理器的 MacBook Pro、Sonoma 14.1.2 作为操作系统以及 Homebrew 的 gcc 和 gfortran(几分钟前重新安装)。我能够解决编译过程中的几个问题,但现在出现以下错误
ld: library 'System' not found
collect2: error: ld returned 1 exit status
我尝试将
LD_LIBRARY_PATH="/usr/local/Cellar/gcc/13.2.0/lib/gcc/current/"
添加到 PATH 环境变量,但没有成功。我认为collect2指向 /usr/lib/libiconv.2.dylib 和 /usr/lib/libSystem.B.dylib 不在那个地方,但我不知道如何解决这个问题。有什么想法吗?
我最近有这个
ld: library not found for -lSystem
Mac OS 从 v10 升级到 v11 (Big Sur) 后出现问题。我正在使用
Xcode 12.3
并使用 brew install gcc
安装 gfortran 10.2.0
。尝试后我仍然看到错误brew reinstall gcc
。我能够使用以下方法解决问题:
brew install gfortran
但我不知道为什么会这样。