我在 c 中使用 sqrt() 时遇到问题。
我正在尝试做这样的事情:
int a;
a = sqrt(9);
ETC
我被限制使用:
gcc -ansi -Wall -pedantic oneFile.c anotherFile.c thirdFile.c -o outputFileName
如何在不使用 -lm 命令的情况下进行编译?
是的,我有 #include !
有什么办法可以解决这个问题并且仍然使用 sqrt()?
谢谢
我在 c 中使用 sqrt() 时遇到问题。
我正在尝试做这样的事情:
int a;
a = sqrt(9);
ETC
我被限制使用:
gcc -ansi -Wall -pedantic oneFile.c anotherFile.c thirdFile.c -o outputFileName
如何在不使用 -lm 命令的情况下进行编译?
是的,我有 #include !
有什么办法可以解决这个问题并且仍然使用 sqrt()?
谢谢
没有-lm
. 这是链接器针对内置数学库进行编译的指令。光说是不够的#include <math.h>
,因为那只是一个头文件——里面没有代码,它只是告诉编译器你正在使用的函数是什么样的。您仍然需要将该函数的实现实际放入您的代码中,并-lm
基本上告诉链接器look in libm, check to see if it has any functions that we haven't found yet
。如果您不查看那里,您将永远无法实际执行sqrt
,因为代码根本不在您的程序中。
如果您正在处理家庭作业并且仅限于使用该命令行,那么您的部分作业可能不使用数学库中的任何内容,因此您可能需要考虑另一种方法。
#include <math.h>
在标题中使用
否则使用用户定义功能
如果您不想使用库,请尝试使用此功能。
Sq_root(n)
{
count=0;
int i = 0;
for(i=1;sum<=n;i+=2)
{
sum+=i;
count++;
}
return (count);
}
这将起作用,无需任何数学库。
int int_sqrt(int x){
int s, t;
s = 1; t = x;
while (s < t) {
s <<= 1;
t >>= 1;
}
do {
t = s;
s = (x / s + s) >> 1;
} while (s < t);
return t;
}