lgfortran没找到

时间:2012-06-04 12:06:18

标签: ubuntu makefile linker fortran gfortran

我正在使用Ubuntu 10.04并尝试编译一些使用gfortran的代码。 Makefiles在某些时候做了:

-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

4 个答案:

答案 0 :(得分:12)

您的gfortran版本是否与g++版本不同?或者它可能安装在不同的位置?

-lname选项(在本例中为namegfortran)指示链接器在库搜索路径中搜索名为libname.a的库文件。如果找到并且-[B]static选项不强制执行静态链接,则链接器将再次搜索libname.so并反向链接(如果找到)。如果找不到libname.a,则会出现错误,尽管存在libname.so

libgfortran.a安装中应该有一个gfortran。使用find搜索并使用g++提供-L/path/to/compiler/libs的路径。如果g++gfortran版本相同,则libgfortran.a的路径已经存在于库搜索路径中(因为C / C ++和Fortran静态库都位于同一位置) 。如果两个编译器的版本不同,它将不存在。

例如,基于64位RedHat的系统libgfortran.a位于/usr/lib/gcc/x86_64-redhat-linux/<GCC version>/,而共享libgfortran.so.*位于/usr/lib64

另一种解决方案是将-lgfortran替换为/usr/lib/libgfortran.so.3

-L.选项与-lCGAL相关,而非与-lgfortran相关。

答案 1 :(得分:4)

今天编译ATLAS时遇到了同样的问题,并且能够使用libgfortran.so.3libgfortran.so的符号链接修复它。

答案 2 :(得分:3)

请确保你:

gcc --version

gfortan --version

是一样的。

/usr/bin/ 

包含不同的版本。

例如:如果gcc--version returns 4.7.3gfortran --version 4.8,则可以执行以下操作:

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

它应该有用。

答案 3 :(得分:3)

我遇到了同样的问题并尝试了以下命令。用这个问题解决了这个问题:

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