######## 该系列博文为书籍《程序员的自我修养》的笔记 ##########
【说明】
我们平时写程序并没有直接调用操作系统的系统调用,而是使用库函数比如printf ,然后 printf 去调用系统调用。这节就来看看我们是怎么以静态方式将库和我们的程序链接起来的,另外就是我们如何自己来做库文件。
【静态库】
其实一个静态库里面有很多.o 文件,他们被打包形成了一个库文件,一般是.a 文件
比如我们来看看/usr/lib/libc.a 这个文件,一堆.o文件
【库的链接】
如果我们写了一个hello world 调用了printf,那按照前面介绍的静态链接的原理,是不是我们直接将printf.o 拷贝到工程目录中也行呢?其实不是这样的。为什么?因为printf.o里面也用到其他的库文件,其他库文件又用到别的库文件,除非把所有这些有关系的库文件都拷贝到工程中,才可以让这个hello world 不需要库的支持。
【自制静态库】
我们如何将自己的;.o 文件制作成为.a 文件呢。
1)编译
比如我们的文件是a.c和 b.c ,我们需要先将他们编译成a.o和b.o
gcc -c a.c -o a.o
gcc -c b.c -o b.o
2)制作
ar -rc libtest.a a.o b.o
3)使用
比如我们的test.c 需要用到libtest.a 里面的文件。那就要这么编译
gcc test.c -o test -L./ -ltest
-L参数后面是库文件的路径
-l后面是库文件的名字再除去前面的 "lib“ 所以libtest 就是 test