Chinaunix首页 | 论坛 | 博客
  • 博客访问: 859399
  • 博文数量: 254
  • 博客积分: 5350
  • 博客等级: 大校
  • 技术积分: 2045
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 13:27
文章分类

全部博文(254)

文章存档

2015年(1)

2014年(9)

2013年(17)

2012年(30)

2011年(150)

2010年(17)

2009年(28)

2008年(2)

分类: C/C++

2011-09-02 17:16:16

头文件  


关于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
阅读(907) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~