源码安装CGNS出现undefined reference to `sincos'错误,求解决方法
解决CGNS源码安装中
sincos未定义的链接错误 问题原因
sincos属于数学库函数,当前编译链接命令未显式链接数学库(libm),导致链接器无法找到该函数的定义。
解决方案
方案1:修改对应目录的Makefile
- 进入报错的工具目录:
cd /oa/apps/CGNS-4.4.0/src/cgnstools/utilities
- 编辑
Makefile.unix,定位到生成plot3d_to_cgns的规则行(对应报错中的第73行),在链接命令末尾添加-lm参数:
修改前:
gcc -o plot3d_to_cgns plot3d_to_cgns.o cgnsutil.o \ binaryio.o getargs.o /oa/apps/CGNS-4.4.0/src/lib/libcgns.a
修改后:
gcc -o plot3d_to_cgns plot3d_to_cgns.o cgnsutil.o \ binaryio.o getargs.o /oa/apps/CGNS-4.4.0/src/lib/libcgns.a -lm
- 重新执行编译:
make
方案2:全局配置时添加链接参数
如果多个CGNS工具都需要链接数学库,可以在配置阶段统一设置:
- 回到CGNS源码根目录,先清理之前的编译文件:
make clean
- 重新运行configure并指定链接参数:
./configure LDFLAGS="-lm"
- 重新编译:
make
方案3:适配老旧编译器(可选)
若使用的GCC版本较低,sincos函数需要定义_GNU_SOURCE宏才能启用,可在编译参数中添加该宏:
编辑Makefile.unix中的CFLAGS行,添加-D_GNU_SOURCE:
CFLAGS = -g -O2 -I../common -I/oa/apps/CGNS-4.4.0/src -D_GNU_SOURCE
然后再按照方案1添加-lm参数后重新编译。
内容的提问来源于stack exchange,提问作者mardar
相关产品推荐
相关产品推荐

