linux下如何创建库文件

来源:互联网 发布:琉璃神社换的域名2017 编辑:程序博客网 时间:2024/06/07 01:33
一、重要概念。
                 1.1 库文件。库文件实际上是使用共享程序代码的一种方式。库文件分为静态库和动态库。linux下静态库文件的后缀为.a 动态库的后缀为.so。 windows下的静态库文件的后缀为.lib。动态库文件的后缀为.dll。
                 1.2 静态库。程序编译一般需经预处理、编译、汇编和链接几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接 器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有 多份冗余拷贝。
                 1.3动态库。动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的复本,因此节省了很多内存。

           
                 二、如何使用ar命令创建静态库文件。
            2.1 ar 对应的英文是 archive
 ['ɑ:kaiv] 归档的意思。.a,是静态库,是一个或多个.o文件"打包"(ar)在一起,用于静态链接。(一个.o文件可以有多个函数)
            2.2 ar的使用方法。
                  2.2.1创建一个静态库文件。
                                  ar -rv libhello.a  hello1.o hello2.o hello3.o
                                  
ar -qv libhello.a  hello1.o hello2.o hello3.o
                                  如果libhello.a不存在则创建该库文件。如果存在则在不检查相同成员的情况下
                                   将新的成员添加到末尾。
                          2.2.2 查看库文件中的所有模块。
                                  ar -t libhello.a 
                                  依次列出库文件中所有模块成员,显示次序是根据添加模块次序。
                           2.2.3 删除库文件中的模块。
                                   ar -dv libhello.a hello3.o
                                  将模块hello3.o在库文件中删除。
                          2.2.4 将库文件中指定的模块取出来。
                                   ar -xv libhello.a hello1.o
                                  将库模块hello1.o释放到当前文件夹下,不会删除库文件中的该模块。
                          2.2.5 在指定的模块后面插入新的成员。
                                  ar -ra hello2.o libhello.a hello3.o
                                  将模块hello2.o插入到库文件libhello.a中的hello3.o后面。
                           2.2.6 更新库中的模块。
                                     ar -ru  libhello.a hello3.o
                                     如果libhello.a库中没有hello3.o将其添加到库末尾。
                                     如果有的话将替换之。
             三、如何使用库文件。
               3.1 静态库文件的命名。
   静态函数库命名规则: lib*.a.*, 第一个"*"为库real name, 第二个"*"为库的主版本号和一个发行版本号(可选). 如果某个静态链接库不符合此格式,则LINUX的链接库自动装入程序 将搜索不到此链接库,其它程序也无法共享之.
          
                3.2 在编译的时候将相应的库文件链接上即可。
                     例如
                          gcc  main.c -L.  -lhello.a
                       注意:在链接库文件时,库文件的名字要除掉lib。
 
               在使用库文件时,最直接的方式就是直接将其加到编译文件里面去。
           例如:
                     gcc -g  -
o readAD   readAD.c    ../lib/libxysqlite.a
 
                 四,对库文件的理解。
              现在我觉得库文件的设计是开发模块化的一个体现。在开发的过程中,
 每个人负责一个模块,每个模块都有很多个函数,将这些函数都打包成库函数。
到时候别人就调用你的库函数即可。
               
              简单点的静态库的制作很容易。就是将起编译成.o文件后,对.o文件直接
打包成库函数。
                 例如:
                    ar crs libxysqlite.a libxysqlite.o
                 在libxysqlite.c中写个用来测试的main函数,编译的时候将其注释掉。
如果觉得自己写的函数没什么问题可以不用测试。

     c   Create the archive.
     r   Insert the files member... into archive (with replacement)
     s   Write an object-file index into the archive

   更多的参数理解可以去
                      man ar
0 0