我正在使用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
答案 0 :(得分:12)
您的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
相关。
答案 1 :(得分:4)
今天编译ATLAS时遇到了同样的问题,并且能够使用libgfortran.so.3
到libgfortran.so
的符号链接修复它。
答案 2 :(得分:3)
请确保你:
gcc --version
和
gfortan --version
是一样的。
/usr/bin/
包含不同的版本。
例如:如果gcc--version returns 4.7.3
和gfortran --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