Lgfortran未找到。

10

我正在使用Ubuntu 10.04尝试编译一些使用gfortran的代码。在某个时候,Makefile会执行以下操作:

-L. -lgfortran 

我遇到了一个错误

/usr/bin/ld: cannot find -lgfortran

虽然它已经安装了:

ldconfig -p  |  grep   fortran
    libgfortran.so.3 (libc6,x86-64) => /usr/lib/libgfortran.so.3

如何修复它?

P.S:Makefile:

## FLAGS

CC:= gcc
C++:= g++
CFLAGS:= -c -O -Dintel -g 
FC:= gfortran
FFLAGS:= -c -O -cpp -g
LD:= g++
LDFLAGS:= -O


WETTER_CGAL_FLAGS:=  -g


#WETTER-Data
WETTER_cgal: weather.cpp surface_alg.h $(WETTER_CGAL_OBJECTS) WATT_interface.h data.cpp
    $(C++) $(WETTER_CGAL_FLAGS) -c weather.cpp -frounding-math
    $(C++) -c data.cpp -frounding-math 
    $(LD) $(WETTER_CGAL_OBJECTS) weather.o data.o -o WETTER_cgal -L. -lgfortran -lgmp -lCGAL -frounding-math -fp-model

1
你能提供一个最小的Makefile,以便产生错误吗?这必须是它的问题,因为你的shell环境似乎没问题。 - Luca Geretti
已完成,问题已更新包含该信息。 - Open the way
我遇到了同样的错误,最终使用 ~$ sudo apt-get install libgfortran-* 安装了所有版本来解决它。 - Rγσ ξηg Lιαη Ημ 雷欧
4个回答

13
你的版本是否与你的版本不同?或者它安装在不同的位置?
此处的-lname选项(其中name为)指示链接器在库搜索路径中搜索名为libname.a的库文件。如果找到并且没有通过-[B]static选项强制进行静态链接,则链接器将再次搜索libname.so并链接至其上(如果找到)。如果未找到libname.a,则会给出错误,尽管存在libname.so
在安装中应该有一个libgfortran.a。使用find搜索它,并使用-L/path/to/compiler/libs提供路径给。如果与相同版本,则libgfortran.a的路径已存在于库搜索路径中(因为C/C++和Fortran静态库位于同一位置)。如果两个编译器版本不同,则不会存在。
例如,在基于64位RedHat系统上,libgfortran.a位于/usr/lib/gcc/x86_64-redhat-linux/<GCC version>/,而共享库libgfortran.so.*位于/usr/lib64
另一种解决方案是用/usr/lib/libgfortran.so.3替换-lgfortran-L.选项与-lCGAL而不是-lgfortran相关。

5

今天我在编译ATLAS时遇到了同样的问题,通过从libgfortran.so.3libgfortran.so的符号链接,我成功地解决了这个问题。


1
好的,这对我有用,但它为什么有效?另外,在ld.so.conf.d/中创建链接是否可行? - Seanny123

3

请确保你:

gcc --version

同时

gfortan --version

相同。
/usr/bin/ 

包含不同的版本。

例如:如果gcc--version返回4.7.3gfortran--version 4.8,一个简单的hack方法可以是执行以下操作。

sudo cp /usr/bin/gcc-4.8 /usr/bin/gcc

它应该可以工作。


在我的系统中,它指向 /etc/alternatives/gcc,我使用了 alternatives --config gcc 命令来选择适当的 gcc 版本。 - Jijo
你应该说 gfortran --version - Katya
对我来说,上述命令的意思是:“cp: /usr/bin/gcc-11.3.0: 没有那个文件或目录”。 - Katya

3

我曾经遇到过同样的问题,尝试了下面这个命令。使用这个命令后,问题得以解决:

sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so


对我来说,该命令的意思是:“ln: /usr/lib/libgfortran.so: 操作不允许”。 - Katya

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