我在C中遇到了一个奇怪的问题。我在头文件中包含了库,例如pow(x,n)
函数也可以工作。
另一方面,下一个代码根本不运行:
float calcArea(double edgeA){
double s=edgeA;
float area = sqrt(s);
return area;
}
但是,当我将sqrt(s)
更改为sqrt(45)
(或任何其他自然数字)时,它不会产生任何问题。
我还检查了sqrt()
函数几次,只要参数是一个变量,它仍然没有。
解决此问题的任何建议都会有所帮助, 提前致谢
编辑:我正在使用Eclipse
答案 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