我正在使用 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
我该如何解决?
附言: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
.
关于ubuntu - 未找到 lgfortran,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10881002/