我正在使用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

最佳答案

您的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有关。

07-28 09:27