2011-07-17 72 views
2

我無法編譯下面的簡單C代碼,我不知道爲什麼。C程序編譯錯誤:undefined reference

#include <stdlib.h> 
#include <stdint.h> 
#include <stdio.h> 
#include <math.h> 
int main(){ 
    double result; 
    result = cos(0.5); 
    printf("asin(0.5) is %f\n", result); 
    return 0; 
} 

我收到後,我嘗試編譯錯誤信息是 -

In function 

'main': 
test.c:(.text+0xlc): undefined reference to 'cos' 
collect2: ld 

returned 1 exit status 
+4

順便說一句,我希望你注意到你正在計算餘弦,並說結果是弧 - 正弦,這是不一樣的事情。 –

+0

這實際上是一個鏈接器錯誤,而不是編譯器錯誤。這是明確的,因爲錯誤來自鏈接器'ld'。原因總是缺少導入庫。 –

回答

14

您需要用數學庫(-lm)鏈接。

gcc -Wall -Wextra -o test test.c -lm 

看到這個C FAQ

0

一般來說,每當你得到未定義的引用錯誤,這是由於編譯器無法找到你的函數定義。所以它可能是你的函數(並且你沒有正確輸入函數的拼寫,所以你會得到這個錯誤),或者可能像你在這種情況下遇到的內置函數。
探索有各種各樣的圖書館和他們的連接都需要在編譯時

只要您使用數學函數使用-lm(L代表鏈路和M是數學)
在並行線程的內置函數使用-lpthread
等等... 在這種情況下確實使用-lm

gcc -lm test.c 

就能編譯程序。