浅谈Linux的库文件
作者:yasaken 发布时间:2021-07-01 08:54:36
最近在Linux下使用第三方库Protobuf时,遇到一个问题:可执行程序在运行时报错:“error while loading shared libraries: libprotobuf.so.7: cannot open shared object file: No such file or directory”。于是花时间弄清楚原因,找到解决方案,跟大家共享一下。
1. 什么是库
在windows平台和linux平台下都存在着大量的库。
本质上来说库是一种可执行代码的二进制形式,可以 * 作系统载入内存执行。
由于windows和linux的本质不同,因此二者库的二进制是不兼容的。
2. 库的种类
linux下的库有两种:静态库和共享库(动态库)。
二者的不同点在于代码被载入的时刻不同。
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。对于静态库和动态库的选择,需要结合二者的优缺点折中考虑。一般来说,比较通用的库,应该做成共享库。
3.库存在的意义
库是别人写好的现有的,成熟的,可以复用的代码,你可以使用但要记得遵守许可协议。
现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。共享库的好处是,不同的应用程序如果调用相同的库,那么 在内存里只需要有一 份该共享库的实例。
4. 库文件在linux下是如何生成的
静态库的后缀是.a,它的产生分两步
Step 1:由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表;
Step 2:ar命令将很多.o转换成.a,成为静态库;
动态库的后缀是.so,它由gcc加特定参数编译产生。
例如: $ gcc -fPIC -c *.c $ gcc -shared -Wl,-soname, libfoo.so.1 -o libfoo.so.1.0 *.
5. 库文件是如何命名的,有没有什么规范
在linux下,库文件一般放在/usr/lib和/lib下,
静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称
动态库的名字一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号
6. 如何知道一个可执行程序依赖哪些库
ldd命令可以查看一个可执行程序依赖的共享库,
例如# ldd /bin/lnlibc.so.6
=> /lib/libc.so.6 (0×40021000)/lib/ld-linux.so.2
=> /lib/ld- linux.so.2 (0×40000000)
可以看到ln命令依赖于libc库和ld-linux库
7. 可执行程序在执行的时候如何定位共享库文件
静态库:生成可执行文件时,静态库已经作为自身一部分链接进了可执行文件中,故执行时不需要再定位,也就是说再不依赖于库文件;
动态库:需要知道动态库的路径,参考另一篇博客;
8. 在新安装一个库之后如何让系统能够找到他
如果安装在/lib或者/usr/lib下,那么ld默认能够找到,无需其他操作。
如果安装在其他目录,需要将其添加到/etc/ld.so.cache文件中,步骤如下:
1. 编辑/etc/ld.so.conf文件,加入库文件所在目录的路径;
2. 运行ldconfig,该命令会重建/etc/ld.so.cache文件;
3. ldconfig命令需要root权限;
总结
来源:http://www.linuxidc.com/Linux/2012-03/57023.htm
猜你喜欢
- 1、用户至上无论什么时候,一定要牢记在心:用户至上。没有用户光顾,网站意义何在?更不要谈什么访问量了。2、浏览模式必需考虑网友的浏览器软件,
- 大家都知道,让百度和google收录的方法不仅仅是向她提交自己的站点,这种方法在几年前经常使用,可是目前,大家所使用的恐怕都不这样做了,现在
- 融资15亿美元(仅次于google当年的17亿),市值257亿美元(当日涨幅192%,几乎等于“百度+腾讯”),市盈率309倍(百度200倍
- 一. HTTP压缩概述HTTP压缩是在Web服务器和 浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML
- DNS分为Client和Server,Client扮演发问的角色,也就是问 Server 一个Domain Name,而Server必须要回
- 为了方便与他人沟通、交流,我们常常会在局域网网络环境中,将需要与他人交流的隐私信息放到特定文件夹中,然后将特定文件夹设置为共享文件夹,这样他
- 一位网友在JavaEye询问了一个大型Web系统的架构和部署选型问题,希望能提高现有的基于Java的Web应用的服务能力。由于架构模式和部署
- 虚拟机是非常方便的测试软件,我们可以用来做各种测试,不会对硬件造成伤害,为了能够更加方便的演示环境,便于做各种例子;而又能保证主机的快速运行
- 说到百度贴吧推广中国亚龙是最熟悉不过了,07年有两个月专职做这个,虽然现在没有以前在百度帖吧推广那么疯狂,但到现在也从未间断过。现在就和大家
- 11月19日上午消息,火石软件今日发布代理商更换公告,公告中表示《水浒Q传》将结束同金山的运营合作。同时,火石软件将向畅游公司提供《水浒Q传
- 聚友已经总结了五种Service Unavailable的原因,第一篇是常见的4个方面的原因(原文见http://www.juyo.org/
- 没有时间运行命令?使用 cron 的计划任务意味着你不用熬夜程序也可以运行。系统管理员(在许多好处中)的挑战之一是在你该睡觉的时候去运行一些
- 本文为大家分享了Ubuntu虚拟机多网卡配置,供大家参考,具体内容如下1、场景说明 系统平台:Ubuntu16.04 服务器:V
- 在搜索引擎的“远古”时代,搜索结果的排列只是以搜索引擎在数据库中找到匹配网页的先后次序排列,但人们很快意识到这种搜索根本是无效的。实际上用户
- 为了使各企业使用谷歌AdWords进行市场营销时能更加顺畅,编辑特制作了“谷歌网络营销点金术”系列专
- 百度k站也是有一定规律可寻的 ,我总结了几点,也许大家用的着。总的原则是在百度没关键词没带去多少ip的站基本不k 。要k的起码你的站从bai
- 说实话,没有人喜欢将自己的网站搬来搬去,可是有时候由于种种原因又不得不做出搬家的无赖选择。下面这篇文章来自谷歌网站管理员博客,看看,从搜索引
- 一个良好的站内结构可以帮助Google快速的分析站点,尽快的摆脱沙盒。而且好的整站优化可以让页面间的权重有效的传递,是整站的排名得到提升。下
- 加入google directory以后的网址将受到Google的特别有待,所以历来SEO都特别看重这类的链接。而大家知道GOOGLE DI
- 人们上网都是为了查找并欣赏自己所需要的东西,如果你的网站没有什么内容,人们看一眼就走了,没有回头客,那么你的网站就是每天就是有一万个流量,也