Fortran编译生成.so共享库报undefined symbol未定义符号错误如何修复
修复方案
问题根因
未定义符号报错的核心原因是不同源码编译时的符号命名规则不统一:
编译mesh_map.F时添加了-assume 2underscore参数,而编译extra_fluid2.f90时没有添加该参数,导致两个目标文件中对map_status变量生成的符号名不一致,链接后无法匹配。
修复步骤
- 修正
extra_fluid2.f90的编译命令,补充和mesh_map.F一致的编译参数,保证符号命名规则统一:
ifort -fpic -assume 2underscore -real-size 32 -integer-size 32 -c extra_fluid2.f90
- 修正链接命令的笔误:原命令中
-lrt参数错误插入到编译器路径前,调整到链接参数末尾:
/home/xxx/intel/oneapi/compiler/2021.4.0/linux/bin/intel64/ifort -shared -o ./linux-amd64/ifort/libmesh_map.so linux-amd64/ifort/mesh_map.o extra_fluid2.o -lrt
- 清理原有
*.o目标文件和libmesh_map.so,按修正后的命令重新编译、链接,再执行ldd -r libmesh_map.so即可验证未定义符号报错已消除。
内容的提问来源于stack exchange,提问作者C.Hu
相关产品推荐
相关产品推荐

