以下程序无法在gcc中编译。但它使用扩展名为.c
的g ++和MSC ++编译正常。
#include <math.h>
#include <stdio.h>
int main()
{
double t = 10;
double t2 = 200;
printf("%lf\n", sqrt(t*t2));
return 0;
}
我的系统是CentOS,版本信息。
> gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
错误信息:
> gcc test.c
/tmp/ccyY3Hiw.o: In function `main':
test.c:(.text+0x55): undefined reference to `sqrt'
collect2: ld returned 1 exit status
这是一个错误吗?
任何人都可以为我做测试吗?
答案 0 :(得分:19)
您是否已连接数学库?
gcc -lm test.c -o test
答案 1 :(得分:2)
尝试gcc -lm test.c -o test
对于gcc,你需要告诉它通过添加-lm链接数学库 你的gcc电话。
答案 2 :(得分:2)
添加带有标记-lm
> gcc test.c -lm
答案 3 :(得分:2)
每个人都这么说,但我也会这样说。你必须“告诉”gcc链接到数学库。在编译时,您必须说gcc test.c
,而不是说gcc -lm test.c
。我希望我能#include
math.h而不必做任何其他事情。
答案 4 :(得分:2)
问题是,gcc -lm test.c -o test
不会起作用,因为gcc会将-lm视为编译器而不是链接器选项。您需要将-lm放在命令的末尾,即gcc -o test test.c -lm