Xcode GFortran错误:尝试编译时未找到-lSystem的ld:library
当我试图用gfortran编译一个简单的fortran-90文件时,我遇到了一个奇怪的错误。我正在研究macOS mojave系统。我已经安装了gfortran 8.2.0,并通过执行以下操作进行了检查:Xcode GFortran错误:尝试编译时未找到-lSystem的ld:library,xcode,macos,gcc,fortran,gfortran,Xcode,Macos,Gcc,Fortran,Gfortran,当我试图用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 f
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
我尝试过以不同的方式编译,也尝试过在.bash_配置文件中设置LD_LIBRARY_路径,如所述,但仍然出现相同的错误。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
在似乎所有设备都已正确安装的情况下,如何修复此问题
任何帮助都将不胜感激 更新:我尝试了建议,并使用自制软件从gcc包中安装了gfortran版本,这给了我一个更新版本的gfortran,我的问题得到了解决 我也遇到了同样的问题,但是使用自制从gcc包安装gfortran build没有帮助。相反,我使用自制软件安装了整个gcc:
brew安装gcc
这就解决了问题。我最近有这个
ld: library not found for -lSystem
将Mac OS从v10升级到v11(大苏尔)后出现问题。我使用的是Xcode 12.3
,我使用brew安装gcc
安装gfortran 10.2.0
。在尝试brew重新安装gcc
后,我仍然看到错误。我能够使用以下方法解决问题:
brew install gfortran
但我不知道为什么会这样。我也会插话(2020年12月19日),我刚从MacOS Mojave更新到Catalina,突然出现了这个错误
这件事解决了
brew重新安装gcc
brew重新安装gfortran
在macOS Big Sur v11.1上:
相关SO职位:
修复方法是将stdlib添加到$LIBRARY\u路径中。出于某种原因,它不再出现在11.1上的标准$PATH
中
export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
(或者将其添加到登录文件并重新启动终端)。我遇到了这个问题,我尝试了很多方法来解决这个问题,但仅使用这些“两个”命令就解决了这个问题:
brew reinstall gcc
brew reinstall gfortran
适用于使用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版本。是否安装了xcode命令行工具?根据gfortran二进制文件的不同,这些文件可能是工作所必需的。您可能还想使用自制版本,这些版本是最新的。@janneb我确实为xcode安装了命令行工具,我在另一个apple安装程序上尝试了自制版本,出现了相同的问题,但我可以在这台计算机上尝试。我遇到了相同的问题。但是,当我运行brew重新安装gfortran
时,它只需重新安装gcc
10.2.0,因此问题(ld:library not found for-lSystem
)仍然存在。有什么建议吗?你能告诉我吗?什么是stdlib和$LIBRARY\u路径?特别是,在哪里运行您共享的代码段?谢谢!>“什么是stdlib”大约在亚里士多德时期,程序员们对自己说“嗯,我们似乎在一遍又一遍地编写相同的基本代码,也许我们应该将其标准化”。于是,stdlib诞生了。它包含所有基本的构建块,如内存分配、随机数生成器、字符串到X的转换、进程和系统控制,甚至一些基本的排序例程。它对几乎所有现存的程序都是必不可少的。>$LIBRARY\u PATH[注意:$LIBRARY\u PATH
仅适用于gcc!]您的计算机是一个大垃圾箱,但不知何故,为编译器和链接器工作的魔法精灵确切地知道在哪里查找myBoolLib。因此
可以使用bool invertBoolean(bool-in)代码>。他们怎么知道去哪里找?您可以在每次编译时精确地告诉他们应该在哪里查找,但这很繁琐。因此,您声明了本质上是一个系统范围的变量,它列出了前面提到的精灵在编译时应该查看的一系列位置。>“我在哪里运行您共享的代码段?”来自命令行,但请注意,您每次都必须这样做。或者,您可以将其放入“登录文件”中,假设您使用的bash是~/.bash\u profile
和/或~/.bashrc
。每次打开新终端时都会运行这些文件,并作为一种“自定义”文件。如果将上述代码粘贴到其中一个中,则每当创建新的终端实例时,它都会自动神奇地执行。这不是修复方法。(当然,这会让你得到一个工作的gfortran,但不会回答问题)