与 gcc 链接时未定义对数学函数的引用

与 gcc 链接时未定义对数学函数的引用

make我在使用安装程序时遇到错误。因错误而失败的完整步骤如下所示:

gcc  -g -O2 -fopenmp -L/usr/lib -lcfitsio -lm  -o lenstool_tab e_nfwg.o lenstool_tab.o midpnt.o nrutil.o polint.o qromo.o read_bin.o lenstool_tab.o: In function `main':
/usr/local/src/lenstool-6.8/table_src/lenstool_tab.c:73: undefined reference to `log'
/usr/local/src/lenstool-6.8/table_src/lenstool_tab.c:73: undefined reference to `log'
e_nfwg.o: In function `surfdens2':
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:133: undefined reference to `pow'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:130: undefined reference to `sin'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:138: undefined reference to `pow'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:140: undefined reference to `sin'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:140: undefined reference to `pow'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:144: undefined reference to `sin'
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:144: undefined reference to `pow'
e_nfwg.o: In function `nfwg_kappa':
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:63: undefined reference to `pow'
e_nfwg.o: In function `scmass':
/usr/local/src/lenstool-6.8/table_src/e_nfwg.c:165: undefined reference to `pow'
collect2: error: ld returned 1 exit status
make[1]: *** [lenstool_tab] Error 1
make[1]: Leaving directory `/usr/local/src/lenstool-6.8/table_src'
make: *** [all-recursive] Error 1

很明显,链接到数学库存在问题。我检查过这些代码确实包含#include<math.h>.这个问题的主要原因似乎通常是由于缺少-lmat 编译命令,但正如您所看到的,它出现在上面。我-lm在 makefile 的各个部分添加了看起来合适的内容,但没有帮助。我包括了 makefile这里如果有帮助的话。我应该修改 makefile 来解决这个问题吗?我在网上搜索了这个问题,但似乎没有答案考虑 makefile。我在另一个线程中读到了修改 config.status 以包含的建议-lm,但不清楚在哪里执行此操作。我之前在 Mac 上安装过这个程序,没有出现任何问题,但现在我使用 Ubuntu 14,却收到此错误。任何帮助深表感谢!谢谢。

答案1

应指定链接到的库有对它们的引用。因此,您将命令更改为:

gcc  -g -O2 -fopenmp -L/usr/lib  -o lenstool_tab e_nfwg.o lenstool_tab.o midpnt.o nrutil.o polint.o qromo.o read_bin.o lenstool_tab.o -lcfitsio -lm

这应该可以解决你的问题。您可以修复 Makefile 中的问题,以便稍后指定库。

相关内容