10

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

4 回答 4

13

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

-lname选项(在本例中name为)指示链接器搜索在库搜索路径中gfortran调用的库文件。libname.a如果找到并且该-[B]static选项未强制执行静态链接,则链接器将再次搜索libname.so并链接它(如果找到)。如果libname.a未找到,尽管存在libname.so.

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

例如,在基于 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

于 2012-06-04T16:21:42.060 回答
5

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

于 2012-06-05T15:08:55.810 回答
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

它应该工作。

于 2016-06-20T20:29:22.240 回答
3

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

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

于 2017-02-09T07:03:31.567 回答