GFortran错误:尝试编译时ld未找到-lSystem库

15

当我试图使用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已经正确安装,我也通过在终端上简单地键入"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,但是另一个不是目录的gfortran可以在/usr/local/bin中找到。
打字:
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

如何修复这个问题,即使所有东西都被正确安装了?

非常感谢任何帮助!


2
您是否已安装Xcode命令行工具?根据gfortran二进制文件,这些工具可能是必需的才能使一些东西正常工作。您可能还想使用例如homebrew构建,这些构建将保持最新状态。 - janneb
2
@janneb 我已经安装了Xcode的命令行工具,并且我在另一台苹果设备上尝试了Homebrew构建,但是出现了相同的问题,不过我可以在这台电脑上再试一次。 - datasplice
命令行工具已经过时。解决方案: 运行 sudo rm -rf /Library/Developer/CommandLineTools,然后运行 xcode-select --install,再运行 sudo xcode-select --switch /Library/Developer/CommandLineTools,如果 Xcode 版本太老可以更新版本,最后如果安装了Xcode可以运行 sudo xcode-select -s /Applications/Xcode.app - DawnSong
9个回答

25

2
"什么是stdlib" 在亚里士多德时代,程序员们想到了一个问题:“嗯,我们似乎一遍又一遍地编写相同的基本代码,也许我们应该将其标准化。”于是stdlib诞生了。它包含了所有基本构建块,如内存分配、随机数生成器、字符串转换为X、进程和系统控制,甚至还有一些基本的排序例程。它对于几乎任何现有的程序都是必不可少的。 - Jacob Faib
2
$LIBRARY_PATH 【注意:$LIBRARY_PATH 仅适用于 gcc!】你的计算机是个大垃圾箱,但编译器和链接器工作的魔法精灵却知道在哪里寻找 myBoolLib.so,以便你可以使用 bool invertBoolean(bool in);。他们是如何知道去哪里寻找的呢?你可以每次编译时告诉他们要查找的具体位置,但那样太过繁琐。因此,你需要声明一个系统级变量,列出一堆这些魔法精灵编译时应该查找的地方。 - Jacob Faib
1
我应该在哪里运行你分享的代码片段?从命令行中运行,但是请注意,每次都需要这样做。或者,您可以将其放在您的“登录文件”中,假设您正在使用Bash,则为〜/ .bash_profile和/或〜/ .bashrc。每次打开新终端时都会运行它们,并作为一种“自定义”文件。如果您将上述代码粘贴到其中任何一个文件中,它将自动执行每当您创建新的终端实例时。 - Jacob Faib
1
在我的 Big Sur 系统上,实际上路径略有不同:export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/usr/lib" - Victor Eijkhout
你是说,你根本没有 MacOSX.sdk 吗?还是最新的头文件在 MacOSX11.1.sdk 中?实际上,MacOSX.sdk 应该是一个符号链接,指向最新版本,在我的(也是 Big Sur)系统中,这是 MacOSX.sdk -> MacOSX11.3.sdk - Jacob Faib
显示剩余2条评论

9
我将以下内容添加到了我的~/.profile文件中:
export SDKROOT=$(xcrun --sdk macosx --show-sdk-path)
export LIBRARY_PATH="$LIBRARY_PATH:$SDKROOT/usr/lib"

它有效。


1
或许值得将 export LIBRARY_PATH="$LIBRARY_PATH:$SDKROOT/usr/lib" 放入代码中。 - veryreverie
SDKROOT需要被导出吗?它对构建工具有什么作用吗? - vaughan

4

我也想谈谈我的经验(2020年12月19日),我刚从MacOS Mojave升级到Catalina,突然遇到了这个错误。

这个问题在以下操作后自己解决了:

brew reinstall gcc
brew reinstall gfortran

2

更新:我尝试了建议的方法,并使用Homebrew安装了gcc包中的gfortran版本,这给了我一个更新版本的gfortran,我的问题得到了解决!

最初的回答:


1
我遇到了同样的问题,但是使用Homebrew安装gcc包中的gfortran构建并没有帮助。相反,我使用Homebrew安装了整个gcc:

brew install gcc

这解决了问题。


这不是一个解决方法。(虽然它可以让你得到一个可用的gfortran,但并没有回答问题) - novelistparty

1

我在.zshrc文件的末尾添加了以下行:

export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"

我重新运行了我的Fortran代码进行编译 - 成功!在我的macOS系统中,-lSystem的问题已经解决。


1

对于使用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和Big Sur两个版本的SDK。 我将MacOSX.sdk软链接更改为指向Catalina版本。

0

我曾经遇到过这个问题,尝试了很多方法来解决它,但只有使用这两个命令才解决了它:

brew reinstall gcc
brew reinstall gfortran

-1

我最近遇到了这个问题

ld: library not found for -lSystem

从v10升级到v11(Big Sur)的Mac OS后出现问题。我正在使用Xcode 12.3,并使用brew install gcc安装了gfortran 10.2.0。尝试brew reinstall gcc后仍然看到错误。我能够通过以下方式解决问题:

brew install gfortran

但我不知道为什么这个有效。


1
我遇到了同样的问题。然而,当我运行 brew reinstall gfortran 时,它只是重新安装了 gcc 10.2.0,所以问题 (ld: library not found for -lSystem) 仍然存在。有什么建议吗? - Tomas

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