2011-07-17 126 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 

就能编译程序。

相关问题