一个gcc sqrt函数bug?

时间:2009-12-30 17:17:20

标签: c gcc

以下程序无法在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

这是一个错误吗?

任何人都可以为我做测试吗?

5 个答案:

答案 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