sqrt()函数不能使用变量参数

我不知道我是否遗漏了一些明显的东西,但似乎我无法计算C中变量的平方根; sqrt()函数似乎只适用于常量。 这是我的代码:

#include  #include  int main() { double a = 2.0; double b = sqrt(a); printf("%f", b); return 0; } 

当我运行此程序时,我收到以下错误:

 gcc -Wall -o "test2" "test2.c" (in directory: /home/eddy/Code/euler) /tmp/ccVfxkNh.o: In function `main': test2.c:(.text+0x30): undefined reference to `sqrt' collect2: ld returned 1 exit status Compilation failed. 

但是,如果我将sqrt()中的参数替换为常量(例如b = sqrt(2.0)b = sqrt(2.0) ),那么它可以正常工作。 sqrt()是不是应该使用变量或其他东西?

谢谢您的帮助

您需要链接数学库(在命令行上使用’-lm’)。 在常量的情况下,编译器可能是智能的并且预先计算sqrt(2.0)(因此编译的代码基本上是’b = 1.414 …;’)

编译时可能需要添加-lm 。 当你取常量的平方根时,编译器通过在编译时取平方根来优化代码,因此它根本不使用sqrt

使用命令gcc -Wall -o "test2" "test2.c" -lm这可能会解决这个问题。

除标准C运行时库外,还包括数学库。 在大多数系统中,数学库在历史上是一个需要明确请求的独立实体。

如果是gcc,您需要链接库。

gcc filename.c -lm。

但是在g ++的情况下,不需要链接库,所以这将工作正常:

g ++ filename.c -o filename编译成功后。

要运行,只需在G ++中输入./filename即可。 并在Gcc中输入./a.out。

编译:

 gcc -Wall -o test2 test2.c -lm 

您需要链接数学库。

包括使用“”运算符的数学库

 #include " math.h " 

使用-lm选项编译程序inheritance数学库假设我们的程序名是test.c ,我们编译如下

 gcc test.c -lm 

默认情况下,gcc不链接标准库。 所以如果通过gcc进行编译,你只需要这样做:

gcc filename.c -lm

但是在g ++的情况下,不需要链接库,所以这将工作正常:

g ++ filename.c -o filename

这对我来说很好。 我认为你的数学库存在一些问题。 尝试再次链接,看看。 其他明智的代码是完全完美的。