【静态链接】第2章---------------------静态链接过程(静态库链接)

来源:互联网 发布:windows rt应用下载 编辑:程序博客网 时间:2024/05/24 06:34


########  该系列博文为书籍《程序员的自我修养》的笔记 ##########


【说明】

             我们平时写程序并没有直接调用操作系统的系统调用,而是使用库函数比如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

 

0 0
原创粉丝点击