Linux Mint下gfortran编译Fortran模块遇未定义引用,求库查找方法
解决Fortran链接器未定义引用问题:找到缺失函数所属库
先查项目自带文档或源码注释
老Fortran项目通常会在README、Makefile或者源码开头的注释里说明依赖库。直接搜源码里的PLM、GETTIM相关注释,或者找项目里的编译脚本,里面大概率有链接选项(比如-lxxx)的说明。另外检查项目目录下有没有和这些函数名对应的未编译源文件(比如plm.f、timutils.f90),如果有,把它们加入编译列表一起编译。用
nm命令搜索系统库中的符号
Fortran函数编译后会自动在名字后加下划线(比如源码里的PLM对应plm_),可以用nm命令遍历系统库查找匹配的符号:# 搜索单个符号,递归遍历常见库路径 find /usr/lib /usr/local/lib -name "*.so" -o -name "*.a" | xargs nm -D 2>/dev/null | grep 'plm_'如果找到某个库包含该符号,编译时加上
-l库名(比如找到libbar.so,就添加-lbar参数)。尝试
objdump工具辅助排查
要是nm没找到结果,用objdump查看库的动态符号表:objdump -T /usr/lib/libxxx.so | grep 'plm_'尝试安装常见老Fortran依赖库
部分老Fortran代码依赖libf2c库,可以先安装libf2c-dev包,然后编译时添加-lf2c链接选项试试。
内容的提问来源于stack exchange,提问作者Keir
相关产品推荐
相关产品推荐

