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

时间:2010-08-20 18:05:04

标签: c compiler-errors math.h sqrt

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

#include <math.h>
#include <stdio.h>

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()中的参数替换为常量(例如2.0,(b = sqrt(2.0))),那么它可以正常工作。 sqrt()不应该使用变量或其他东西吗?

感谢您的帮助

8 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

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

gcc filename.c -lm。

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

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

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

答案 4 :(得分:1)

编译:

gcc -Wall -o test2 test2.c -lm

您需要链接数学库。

答案 5 :(得分:1)

包括数学库使用&#34; &#34;操作

#include " math.h "

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

gcc test.c -lm

答案 6 :(得分:1)

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

gcc filename.c -lm

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

g ++ filename.c -o filename

答案 7 :(得分:0)

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