Linux系统基础开发技术1:构建Linux 库文件
Author:gnuhpc 实验环境:Ubuntu Linux 10.04 32bit
库文件是一个包含了编译后代码、数据的文件,用于与程序其他代码连编,它可以程序模块化、编译速度更快,并且易于更新.库文件分为三种(实质为两种,在随后两句话有解释):静态库(在程序之前就已经装载进其中了)、共享库(在程序启动之时加载进去,在程序直接共享)、动态加载库(dynamically loaded,DL)(在程序运行中任何时候都可以被加载进程序中使用,事实上DL并非是一个完全不同的库类型,共享库可以用作DL而被动态加载(静态库在Linux貌似无法用dlopen加载).注意有些人使用dynamically linked libraries (DLLs)来指代共享库,有些人使用DLL这个词来形容任何可以被用作DL的库文件,这个请区分对待. 在具体使用中,我们应该多使用共享库,这用户可以独立于使用该库文件的程序而更新库.DL的确非常有用,但有时候我们可能并不需要那些灵活性,而对于静态库,更新起来实在费劲,我们一般不使用. 2.静态库的建立 静态库就是一堆普通的目标文件(object file),习惯上静态库以.a为后缀,这是使用ar命令生成的.静态库允许用户不用重新编译代码就可以链接程序,以节省重新编译的时间,其实这个时间已经在强大的机器配置和快速的编译器中显得微不足道了,这个常常用来提供程序而不是源代码.速度上,静态ELF(Executable and Linking Format)库文件比共享库或者动态加载库快1%-5%,但实际上常常其他因素而并不一定快. 我们写主文件prog.c: 1: #include ctest1.c 1: void ctest1(int *i) 1: void ctest2(int *i) gnuhpc@gnuhpc-desktop:~/MyCode/lib/statics$ gcc -Wall -c ctest1.c ctest2.c 然后创建静态库libctest.a: gnuhpc@gnuhpc-desktop:~/MyCode/lib/statics$ ar -cvq libctest.a ctest1.o ctest2.o a - ctest1.o 我们查看一下这个库中的文件: gnuhpc@gnuhpc-desktop:~/MyCode/lib/statics$ ar -t libctest.a 此时我们可以编译我们的程序了,注意-l选项,后边的参数是去掉lib和.a的部分,并且需要放在要编译的文件名之后,否则会报错.: gnuhpc@gnuhpc-desktop:~/MyCode/lib/statics$ gcc -o test prog.c -L./ –lctest 3.共享库的建立 共享库是在程序启动时加载的库文件.当共享库加载完毕后所有启动的起来的程序都将使用新的共享库.在创建共享库之前,还需要了解一些知识: 命名规则: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |