9

我不知道我是否遗漏了一些明显的东西,但似乎我无法计算 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() 不应该与变量或其他东西一起使用吗?

谢谢您的帮助

4

7 回答 7

21

您需要与数学库链接(在命令行上使用“-lm”)。在常量情况下,编译器可能很聪明并预先计算 sqrt(2.0)(所以编译的代码本质上是 'b = 1.414...;')

于 2010-08-20T18:08:27.967 回答
3

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

gcc 文件名.c -lm 。

但是,如果是 g++,则无需链接库,因此可以正常工作:

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

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

于 2014-06-03T05:51:18.450 回答
2

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

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

于 2010-08-20T18:08:54.593 回答
1

编译:

gcc -Wall -o test2 test2.c -lm

您需要链接到数学库。

于 2010-08-20T18:09:14.050 回答
1

使用“”运算符包含数学库

#include " math.h "

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

gcc test.c -lm
于 2012-04-13T13:45:12.877 回答
1

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

gcc 文件名.c -lm

但是,如果是 g++,则无需链接库,因此可以正常工作:

g++ 文件名.c -o 文件名

于 2014-05-30T11:32:28.717 回答
0

这对我来说很好。我认为你的数学库有问题。尝试再次链接它并查看。其他明智的代码是完全完美的。

于 2011-10-21T07:02:20.867 回答