我正在使用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
选项(在本例中为name
为gfortran
)指示链接程序在库搜索路径中搜索名为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
有关。