undefined reference to 'sin'

 

undefined reference to 'sin'

當使用gcc編譯器編譯含數學函數的C程序時,會出現undefined reference to `sin'錯誤.這種錯誤一般是由於缺少庫造成的.


如上圖的一個小程序,當在linux下編譯會出現如下問題:


編譯時如下選項即可:

[html] view plaincopy
  1. gcc main.c -lm -o main  

其實,通過這個小問題,我們可以學習更多的知識。

思考如下:

明明是包含了math.h頭文件的,怎麼還顯示sin沒有定義呢?

原來,gcc的sin函數是定義在libm.so裏面了。

用-l選項定義指定的路徑。不填寫的話默認是/lib和/usr/lib內。

因爲linux下所有的函數庫都是以lib開頭的。所以除去頭和尾,那麼m就是代表libm.so

(m是庫名,libm.so是庫文件名)

在使用“ -l”參數時,通常的習慣是除去“lib”函數庫頭和後面的版本號,使用庫名和參數“-l”連接,形成“-lm”。於是,我們需要在gcc找不到庫時,可是使用“-l”直接給定庫名。

(再補充一下:如果庫不在默認路徑的話,用“-L”選項即可添加路徑,gcc sin.c -lm -o sin等價於gcc  sin.c -lm -L/lib -L/usr/lib -o sin)

網上都說libm.so在/lib或是/usr/lib下。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章