ubuntu - 未找到 lgfortran

标签 ubuntu makefile linker fortran gfortran

我正在使用 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选项(在本例中 namegfortran )指示链接器搜索名为 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/

相关文章:

linux -/usr/lib/libpthread.so : No such file or directory &&/usr/lib/libm. so: No such file or directory 已解决

c++ - 动态链接是如何工作的,它的用法以及你如何以及为什么要制作一个 dylib

c++ - Linux 64 中带有 JsonCPP 库的 undefined symbol 。我缺少什么?

linux - Azure Kubernetes : Spring Batch running on Ubuntu 18. 04 很少被杀死

bash - 带正负过滤的多行 grep

linux - cpio 在为 live 重新打包 initrd.lz 时工作不正常

postgresql - 如何在 postgres 扩展的 Makefile 中为 installcheck 设置用户?

linux - 在 Makefile 中设置环境变量

java - JVM如何维护类数据和堆对象之间的关系?

mongodb - 对象仅保存到 Parse Server 而不是保存到 MongoDB