- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux库详解
1 库基础概念
1.1 库分类
?? 有两种说法,假如熟悉WIN平台下DLL,相信不难了解:
??? 库能够有三种使用形式:静态、共享和动态。静态库代码在编译时就已连接到开发人员开发应用程序中,而共享库只是在程序开始运行时才载入,在编译时, 只是简单地指定需要使用库函数。动态库则是共享库另一个改变形式。动态库也是在程序运行时载入,但和共享库不一样是,使用库函数不是在程序运行开 始,而是在程序中语句需要使用该函数时才载入。动态库能够在程序运行期间释放动态库所占用内存,腾出空间供其它程序使用。因为共享库和动态库并没有在程序中包含库函数内容,只是包含了对库函数引用,所以代码规模比较小。
??? Linux下库文件分为共享库和静态库两大类,它们二者差异仅在程序实施时所需代码是在运行时动态加载,还是在编译时静态加载。区分库类型最好方法是看它们文件后缀,通常共享库以.so(Shared Object缩写)结尾,静态链接库通常以.a结尾(Archive缩写)。在终端缺省情况下,共享库通常为绿色,而静态库为黑色。
? 已经开发大多数库全部采取共享库方法。ELF格式可实施文件使得共享库能够比较轻易地实现,当然使用旧a.out模式也能够实现库共享。Linux系统中现在可实施文件标准格式为ELF格式。
.a是为了支持较老a.out格式可实施文件 .so是支持elf格式可实施文件库。
? .a是静态库文件,能够用ar 命令生成。 .so是动态库文件,编译时加上指定选项即可生成,具体选项看对应系统文档了。
1.2 库命名规则
GNU库使用必需遵守Library GNU Public License(LGPL许可协议)。该协议和GNU许可协议略有不一样,开发人员能够无偿使用GNU库进行软件开发,但必需确保向用户提供所用库函数源代码。
库命名和约定:(1)所以库全部以lib开头,很多开发工具全部依靠这个约定,尤其是GCC,它会在-l选项所指定文件名前自动地插入lib. (2)文件名以.a(代表存档,archive)结尾库全部是静态库,文件名以.so(代表共享目标文件,shared object)结尾库全部是共享库,比如,libdl.a是一个静态库,而libc.so是一个共享库。采取旧a.out格式共享库后缀名为.sa。(3) 以_g和_p结尾库,如libform_g.a和libfor_p.a,是基础库libform特殊版本。通常以_g结尾库是调试库,它们编入了特殊符号和功效,能够增加对采取了这个库应用程序进行调试能力。类似地,代码剖析(profiling)库通常在名字后面附加_p,她们包含地代码和符号能够进行复杂地代码剖析和性能分析。假如你使用了这些库中某一个,那么一旦完成调试或剖析工作,需要使用基础库重新编译你程序。
库名通常格式为: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,版本号为5。libm.a则是静态数学库。X-Windows库名为libX11.so.6,这里使用X11作为库标识,版本号为6。
每个共享函数库全部有个特殊名字,称作“soname”。Soname名字命名必需以“lib”作为前缀,然后是函数库名字,然后是“.so”,最终是版本号信息。不过有个特例,就是很底层C库函数全部不是以lib开头这么命名。
每个共享函数库全部有一个真正名字(“real name”),它是包含真正库函数代码文件。真名有一个主版本号,和一个发行版本号。最终一个发行版本号是可选,能够没有。主版本号和发行版本号使你能够知道你到底是安装了什么版本库函数。
另外,还有一个名字是编译器编译时候需要函数库名字,这个名字就是简单soname名字,而不包含任何版本号信息。
管理共享函数库关键是区分好这些名字。当可实施程序需要在自己程序中列出这些她们需要共享库函数时候,它只要用soname就能够了;反过来,当你要创建一个新共享函数库时候,你要指定一个特定文件名,其中包含很细节版本信息。当你安装一个新版本函数库时候,你只要先将这些函数库文件拷贝到部分特定目录中,运行ldconfig这个实用就能够。Ldconfig检验已经存在库文件,然后创建soname符号链接到真正函数库,同时设置/etc/ld.so.cache这个缓冲文件。这个我们稍后再讨论。
您可能关注的文档
最近下载
- 妇产科护士2022年第二季度专科理论考核.docx VIP
- 2025年老年人防诈骗知识宣传专题讲座PPT模板.pptx
- 2024年医美注射材料市场发展分析报告.pdf
- 日历表2025年日历 (中文版 横向排版 周一开始 带农历 带节假日调休安排).docx VIP
- UDM-502系列合并单元智能终端技术及使用说明书.8S033400_A04.pdf VIP
- 《针织技术基础》课件——思政案例5--生命至高无上,安全责任为天.pptx VIP
- 机械制造技术基础习题答案.ppt VIP
- 公路工程量清单报价表.pdf VIP
- 2025-2026学年上期九年级第一次家长会课件.pptx VIP
- CN120225197A 药物组合及其用途(诺华股份有限公司).docx VIP
原创力文档


文档评论(0)