lgfortran未find

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

我该如何解决?

PS: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.solibname.so链接(如果找到)。 如果没有找到libname.a即使存在libname.so也会发生错误。

在你的gfortran安装中应该有一个libgfortran.a地方。 用find它,并用-L/path/to/compiler/libs提供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

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

-L. 选项与-lCGAL不是-lgfortran

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

只要确保你:

 gcc --version 

 gfortan --version 

是一样的。

 /usr/bin/ 

包含不同的版本。

例如:如果gcc--version returns 4.7.3gfortran --version 4.8 gcc--version returns 4.7.3 gfortran --version 4.8 ,简单的黑客可以做以下事情。

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

它应该工作。

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

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