5.11 库的使用
代码的复用是计算机程序设计语言中的一个重要的概念。可以把编译好的目标文件模块统一放到一个库中,使得程序员可以在不同的程序*享这些代码。
在Linux操作系统下,最后连接生成可执行文件时,如果链接的是一般的.o文件,则整个文件的内容都会被装入可执行文件中;如果链接的是库,则只是从库中找到程序中用到的变量和函数,将它们装入可执行文件中,那些在库中没有被程序所引用的变量和函数则不会被链接到最终的可执行文件。
所以,库可以节省大量的开发时间。在写较大程序时,最好把程序模块放在库中。
5.11.1 创建库和维护库
库中所有文件都叫作库的成员,可以时用以下格式来表示库的成员:
库名(成员名)
如:
mylib.a(mytest5_1.o)
用来表示库mylib.a中的一个文件mytest5_1.o。 #.a为库常用的扩展名
表示库成员的另一个格式:
库名((entry))
使用下面格式来说明库和成员的依赖关系:
库名:库名(成员名) 库名(成员名) ...
另一种格式说明依赖关系:
库名 .LIBRARY:成员名1 成员名2 ...
示例:维护一个名为mylib的库,makefile文件格式如下:
mylib:mylib(test5_1.o) gcc -c test5_1.c ar -ruv mylib test5_1.o rm test5_1.o mylib:mylib(test2.o) gcc -c test2.c ar -ruv mylib test2.o rm test2.o
ar 命令的作用是从.o结尾的目标文件更新库,格式如下:
ar -ruv 库名 目标文件名
上面两段代码很相似,可以利用动态宏合并不同的文件,代码如下: