- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux 动态库(so)
动态库(.so)
此页由Linux Wiki用户Chenxing于2011年3月27日 (星期日) 07:11的最后更改。
出自Linux Wiki
Linux中的.so文件类似于Windows中的DLL,是动态链接库,也有人译作共享库(因so的全称为Shared Object)。当多个程序使用同一个动态链接库时,既能节约可执行文件的大小,也能减少运行时的内存占用。[1]
对于用户而言,经常遇到的问题是某些应用程序找不到其需要的.so文件:
error while loading shared libraries: ...: cannot open shared object file: No such file or directory
本文将主要围绕该问题展开,介绍so文件存放位置、版本命名方案等。欢迎补充其它信息。
目录
[隐藏]
1 存放位置
2 程序链接的动态库
3 版本
4 参考资料
存放位置
Linux中绝大多数.so文件都存放在/lib、/usr/lib/(见Linux目录结构),对于64位和32位共存的系统,32位的动态库可能会放在/lib32、/usr/lib32,完整的动态库存放路径列表可通过/etc/ld.so.conf文件配置。(如果修改了配置,需要用 /sbin/ldconfig 命令更新缓存)
应注意动态库搜寻路径并不包括当前文件夹,所以当即使可执行文件和其所需的so文件在同一文件夹,也会出现找不到so的问题,如
./chrome: error while loading shared libraries: libnss3.so.1d: cannot open shared object file: No such file or directory
此时可用LD_LIBRARY_PATH环境变量做临时设置,如:
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./chrome
也有些so文件是在程序执行时临时加载的(如插件),它们的路径就比较灵活,只要可执行文件能找到它就行了。
程序链接的动态库
一个可执行文件链接了哪些动态库呢?在遇到“error while loading shared libraries”时,我们难免会对此产生好奇。
查看该信息的方法是通过ldd,如
$ ldd chrome
linux-vdso.so.1 = (0x00007fff52dff000)
libX11.so.6 = /usr/lib/libX11.so.6 (0x00007f0caebe4000)
libdl.so.2 = /lib/libdl.so.2 (0x00007f0cae9e0000)
libXrender.so.1 = /usr/lib/libXrender.so.1 (0x00007f0cae7d6000)
libXss.so.1 = /usr/lib/libXss.so.1 (0x00007f0cae5d3000)
libXext.so.6 = /usr/lib/libXext.so.6 (0x00007f0cae3c1000)
librt.so.1 = /lib/librt.so.1 (0x00007f0cae1b9000)
....(略)
要想看系统还没找到的动态库,可以借用grep:
$ldd chrome | grep not found
libnss3.so.1d = not found
libnssutil3.so.1d = not found
libsmime3.so.1d = not found
libplc4.so.0d = not found
libnspr4.so.0d = not found
版本
动态库的版本总是个问题,如果编译时链接的库和执行时提供的不一样,难免会导致程序的执行发生诡异的错误。为解决此问题,Linux系列的做法是这样的:
首先,每个so文件有一个文件名,如libABC.so.x.y.z,这里ABC是库名称,x.y.z是文件的版本号,一般来说:[2]
第一位x表示了兼容性,x不一样的so文件是不能兼容的。
第二位y的变化表示可能引入了新的特性(Feature),但总的来讲还是兼容的。
第三位z的变化一般表示仅是修正了Bug。
并非所有.so文件都遵循此规则,但其应用确实很普遍。
在系统中,会存在一些符号链接, 如[3]:
libpam.so - libpam.so.0.83.0
libpam.so.0 - libpam.so.0.83.0
其中第一个主要在使用该库开发其它程序时使用,比如
您可能关注的文档
最近下载
- 数字1-10字帖 下载打印即可(免费).doc VIP
- 征信简版电子版PDF个人信用报告最新版2024年可编辑带水印模板.pdf VIP
- 企业数字化转型框架及步骤(咨询).pptx VIP
- 针-板电极下针尖曲率和铝箔尺寸对放电机理的影响.pdf VIP
- 因式分解法解二元一次方程.docx VIP
- 2025年陕西省九年级中考考试语文真题试卷(中考真题+答案).docx VIP
- T_CPIA 0052-2023 光伏组件接线盒用模块二极管.docx VIP
- 各类酒店工程造价估算((完整版)).doc VIP
- 10J301 地下建筑防水构造.pdf VIP
- 最新版军队文职人员招聘(司机岗)考试题库(完整版).pdf.docx VIP
文档评论(0)