Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3350945
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类: C/C++

2011-02-27 22:39:42

      库是预编译的目标文件(object files)的集合,它们可被链接进程序。静态库以后缀为‘.a’的特殊的存档文件(archive file)存储。

      标准系统库可在目录 /usr/lib/lib 中找到。比如,在类 Unix 系统中 C 语言的数学库一般存储为文件 /usr/lib/libm.a。该库中函数的原型声明在头文件 /usr/include/math.h 中。C 标准库本身存储为 /usr/lib/libc.a,它包含 ANSI/ISO C 标准指定的函数,比如‘printf’。对每一个 C 程序来说,libc.a 都默认被链接。

下面的是一个调用数学库 libm.asin 函数的的例子,创建文件calc.c: 

#include
#include
int main (void)
{
double x = 2.0;
double y = sin (x);
printf ("The value of sin(2.0) is %f\n", y);
return 0;
}

尝试单独从该文件生成一个可执行文件将导致一个链接阶段的错误:
sinkingboat@sinkingboat-Aspire-4710:~$ gcc -Wall calc.c -o calc
/tmp/ccTC3CKY.o: In function `main':
calc.c:(.text+0x1b): undefined reference to `sin'
collect2: ld returned 1 exit status

函数 sin,未在本程序中定义也不在默认库‘libc.a’中;除非被指定,编译器也不会链接‘libm.a’。 为使编译器能将 sin 链接进主程序‘calc.c’,我们需要提供数学库‘libm.a’。为使编译器能将 sin 链接进主程序‘calc.c’,我们需要提供数学库‘libm.a’。一个容易想到但比较麻烦的做法是在命令行中显式地指定它:
      $ gcc -Wall calc.c /usr/lib/libm.a -o calc
函数库‘libm.a’包含所有数学函数的目标文件,比如sin,cos,exp,log及sqrt。链接器将搜索所有文件来找到包含 sin 的目标文件。
一旦包含 sin 的目标文件被找到,主程序就能被链接,一个完整的可执行文件就可生成了:
    $ ./calc
    The value of sin(2.0) is 0.909297
 
参考文献
1.Gcchowto.




阅读(1717) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~