sqrt()函数不使用可变参数[重复
-
30-09-2019 - |
题
这个问题在这里已经有一个答案:
我不知道我是否缺少明显的东西,但看来我无法计算一个 多变的 在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()不应该与变量或其他东西一起使用吗?
谢谢您的帮助
解决方案
您需要与数学库链接(在命令行上使用'-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文件名成功。
要运行,只需在g ++中输入./filename。并在GCC中输入./a.out。
编译:
gcc -Wall -o test2 test2.c -lm
您需要链接到数学库。
使用“”运算符包括数学库
#include " math.h "
使用编译程序 -lm
继承数学库的选项假设我们的程序名称是 test.c
我们编译如下
gcc test.c -lm
GCC默认情况下不会链接标准库。因此,如果通过GCC编译:您只需要这样做:
GCC FILENAME.C -LM .
但是,如果G ++无需链接库,所以这可以正常工作:
g ++ filename.c -o文件名
这对我来说很好。我认为您的数学库存在一些问题。尝试再次链接并查看。其他明智的代码是完全完美的。