关于sqrt,sin和cos函数
就算是引入math.h头文件,也不会找到sqrt,sin和cos函数。应该用链接库来解决。
有时候我们使用了某个函数,但是我们不知道库的名字,这个时候怎么办呢?
首先, 我到标准库路径( /lib)下面去找看看有没有和我用的函数相关的库,我就这样找到了线程(thread)函数的库文件(libpthread.a).
当然,如果找不到,只有一个笨方法.比如我要找sin这个函数所在的库. 就只好用 nm -o /lib/*.so|grep sin命令,
在sin文件当中,我会找到这样的一行libm-2.1.2.so:00009fa0 W sin 这样我就知道了sin在 libm-2.1.2.so库里面,我用 -lm选项就可以了(去掉前面的lib和后面的版本标志,就剩下m了所以是 -lm).
如以下程序:
/* temp.c */
#include
;
int main(int argc,char **argv)
{
double value=sin(1);
printf("Value:%f\n",value);
}
当我们用 gcc -o temp temp.c 编译时会出现下面所示的错误.
/tmp/ccPPabrv.o: In function `main':
math.c:(.text+0x17): undefined reference to `sin'
collect2: ld 返回 1
在 Linux 下,为了使用数学函数,我们必须和数学库连接,为此我们要加入 -lm 选项.
gcc -o temp temp.c -lm 这样才能够正确的编译:
./math
Value1: 0.841471
阅读(949) | 评论(0) | 转发(0) |