C - 对'sqrt'的未定义引用

时间:2012-11-05 08:01:43

标签: c

  

可能重复:
  C programming sqrt function

我在C中遇到了一个奇怪的问题。我在头文件中包含了库,例如pow(x,n)函数也可以工作。 另一方面,下一个代码根本不运行:

float calcArea(double edgeA){
    double s=edgeA;
    float area = sqrt(s);
    return area;
}

但是,当我将sqrt(s)更改为sqrt(45)(或任何其他自然数字)时,它不会产生任何问题。 我还检查了sqrt()函数几次,只要参数是一个变量,它仍然没有。

解决此问题的任何建议都会有所帮助, 提前致谢

编辑:我正在使用Eclipse

2 个答案:

答案 0 :(得分:4)

您应该告诉编译器链接数学库。在Linux上,您应该使用

进行编译
   gcc -Wall -g yoursource.c -o yourprog -lm

gcc的参数顺序很重要:首先是源文件,然后是目标文件,然后是从较高级别到较低级别的库。

至于为什么在使用sqrt(42)时不会发生错误,这是因为gcc可能会不断折叠并内联它。

答案 1 :(得分:3)

你应该在编译时链接数学库

-lm

您没有说明您使用的是哪种编译器,但对于Visual Studio,您可以尝试以下方法:

http://www.steptools.com/support/stdev_docs/help/settings_vc10.html#link

编辑:对于eclipse,请参阅HELP