Compiling
與 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>
. 這個問題的主要原因似乎通常是缺少-lm
at 編譯命令,但正如您所見,它出現在上面。我將 ’ 添加-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 中修復問題,以便稍後指定庫。