Compiling

與 gcc 連結時對數學函式的未定義引用

  • July 17, 2015

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 修改為 include 的建議-lm,但不清楚在哪裡執行此操作。我之前在 Mac 上安裝了這個程序沒有問題,但現在我使用的是 Ubuntu 14,我收到了這個錯誤。任何幫助深表感謝!謝謝。

連結到的庫應該在引用它們*之後指定。*因此,您將命令更改為:

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 中修復問題,以便稍後指定庫。

引用自:https://unix.stackexchange.com/questions/216836