库技术 - Linux库详解.doc

库技术 - Linux库详解.doc

ID:59298765

大小:38.00 KB

页数:12页

时间:2020-09-06

库技术 - Linux库详解.doc_第1页
库技术 - Linux库详解.doc_第2页
库技术 - Linux库详解.doc_第3页
库技术 - Linux库详解.doc_第4页
库技术 - Linux库详解.doc_第5页
资源描述:

《库技术 - Linux库详解.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux库详解1库基本概念1.1库的分类  有两种说法,如果熟悉WIN平台下的DLL,相信不难理解:   库可以有三种使用的形式:静态、共享和动态。静态库的代码在编译时就已连接到开发人员开发的应用程序中,而共享库只是在程序开始运行时才载入,在编译时,只是简单地指定需要使用的库函数。动态库则是共享库的另一种变化形式。动态库也是在程序运行时载入,但与共享库不同的是,使用的库函数不是在程序运行开始,而是在程序中的语句需要使用该函数时才载入。动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其它程序使用。由于共享库和动态库并没有在程序中包括库函数的内容,只是包含了对

2、库函数的引用,因此代码的规模比较小。   Linux下的库文件分为共享库和静态库两大类,它们两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。区分库类型最好的方法是看它们的文件后缀,通常共享库以.so(SharedObject的缩写)结尾,静态链接库通常以.a结尾(Archive的缩写)。在终端缺省情况下,共享库通常为绿色,而静态库为黑色。 已经开发的大多数库都采取共享库的方式。ELF格式的可执行文件使得共享库能够比较容易地实现,当然使用旧的a.out模式也可以实现库的共享。Linux系统中目前可执行文件的标准格式为ELF格式。  .a的

3、是为了支持较老的a.out格式的可执行文件的  .so的是支持elf格式的可执行文件的库。  .a是静态库文件,可以用ar命令生成。  .so是动态库文件,编译时加上指定的选项即可生成,具体选项看相应的系统文档了。1.2库的命名规则GNU库的使用必须遵守LibraryGNUPublicLicense(LGPL许可协议)。该协议与GNU许可协议略有不同,开发人员可以免费使用GNU库进行软件开发,但必须保证向用户提供所用的库函数的源代码。库的命名和约定:(1)所以的库都以lib开头,许多开发工具都依赖这个约定,特别是GCC,它会在-l选项所指定的文件名前自动地插入lib.

4、(2)文件名以.a(代表存档,archive)结尾的库都是静态库,文件名以.so(代表共享目标文件,sharedobject)结尾的库都是共享库,例如,libdl.a是一个静态库,而libc.so是一个共享库。采用旧的a.out格式的共享库的后缀名为.sa。(3)以_g和_p结尾的库,如libform_g.a和libfor_p.a,是基本库libform的特殊版本。通常以_g结尾的库是调试库,它们编入了特殊的符号和功能,能够增加对采用了这个库的应用程序进行调试的能力。类似地,代码剖析(profiling)库通常在名字后面附加_p,他们包含地代码和符号能够进行复杂地代码

5、剖析和性能分析。如果你使用了这些库中的某一个,那么一旦完成调试或剖析工作,需要使用基本库重新编译你的程序。库名的一般格式为:libname.major_num.minor_num.patch_num,例如,libgdbm.so.2.0.0,libgdbm.so是库libname,major_num是2,minor_num和patch_num均为0.  系统中可用的库都存放在/usr/lib和/lib目录中。这里的name可以是任何字符串,用来唯一标识某个库。该字符串可以是一个单字、几个字符、甚至一个字母。数学共享库的库名为libm.so.5,这里的标识字符为m,版本号

6、为5。libm.a则是静态数学库。X-Windows库名为libX11.so.6,这里使用X11作为库的标识,版本号为6。每个共享函数库都有个特殊的名字,称作“soname”。Soname名字命名必须以“lib”作为前缀,然后是函数库的名字,然后是“.so”,最后是版本号信息。不过有个特例,就是非常底层的C库函数都不是以lib开头这样命名的。每个共享函数库都有一个真正的名字(“realname”),它是包含真正库函数代码的文件。真名有一个主版本号,和一个发行版本号。最后一个发行版本号是可选的,可以没有。主版本号和发行版本号使你可以知道你到底是安装了什么版本的库函数。另

7、外,还有一个名字是编译器编译的时候需要的函数库的名字,这个名字就是简单的soname名字,而不包含任何版本号信息。管理共享函数库的关键是区分好这些名字。当可执行程序需要在自己的程序中列出这些他们需要的共享库函数的时候,它只要用soname就可以了;反过来,当你要创建一个新的共享函数库的时候,你要指定一个特定的文件名,其中包含很细节的版本信息。当你安装一个新版本的函数库的时候,你只要先将这些函数库文件拷贝到一些特定的目录中,运行ldconfig这个实用就可以。Ldconfig检查已经存在的库文件,然后创建soname的符号链接到真正的函数库,同时设置/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。