![与 gcc 链接时未定义对数学函数的引用](https://linux22.com/image/69208/%E4%B8%8E%20gcc%20%E9%93%BE%E6%8E%A5%E6%97%B6%E6%9C%AA%E5%AE%9A%E4%B9%89%E5%AF%B9%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0%E7%9A%84%E5%BC%95%E7%94%A8.png)
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>
.这个问题的主要原因似乎通常是由于缺少-lm
at 编译命令,但正如您所看到的,它出现在上面。我-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 中的问题,以便稍后指定库。