设为首页 收藏本站
查看: 498|回复: 0

[经验分享] linux下的静态连接库和动态链接库

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-24 09:28:25 | 显示全部楼层 |阅读模式
对linux的静态连接库和动态链接库分不清楚,在看了一篇博文后,现在想做个自己的总结,以加深印象:

1、库的基本概念:
库是可执行代码的二进制形式,其可以被调入操作系统调入内存进行执行。
在window和linux系统,都存在各自的库,但是两种系统的库并不能兼容,因为它们的编译器,连接器,汇编器都是不相同的。
在windows下,静态连接库的后缀是.lib;动态链接库的后缀是.dll
在linux系统下,静态链接库的后缀是.a;动态链接库的后缀是.so

2、静态连接库和动态链接库的命名:
  静态连接库:libxxxx.a
      以lib为前缀,紧接着跟静态库名xxxx(可以自己起),后缀是.a
  动态链接库:libxxxxx.so
      以lib为前缀,紧接着跟动态库名xxxx(可以自己起),后缀是.so
         动态链接库的名字还会有:libxxxxx.so.major.minor   major指的是动态库的主版本号; minor指的是动态库的副版本号

2、静态链接库和动态连接库的比较:
1)在于代码运行时载入内存的时候不同;程序在编译连接的时候,静态链接库的副本是需要载入内存的,并且当多个程序都设计到同一个静态连接库时,会在内存中存在多个副   本;
  动态链接库只有程序在运行的时候,才会载入到内存,而在编译连接时,只是提供了动态链接库的引用(理解为路径)。
2)静态库的代码在编译的过程中已经被载入可执行程序,所以体积比较大;
  动态库在在运行的时候才载入内存,在编译编译过程中只是引用,所以代码体积比较小。

3、为什么需要库的存在
  库是已经现有的,成熟的,可以复用的代码。在程序中可以直接引用,而减少工作量。

4、在linux系统下,如何产生静态库和动态库
  不管是静态库还是动态库,它们的产生都分为两步:
  第一步:有源文件编译成目标文件,后缀是.o
  第二步:根据动态或者静态库各自的命令,生成库

  4.1 静态库
    第一步:gcc -c jia.c     //生成一个jia.o的目标文件
    第二步:ar rcs libjia.a hello.o    //生成静态链接库libjia.a

  4.2动态库
    第一步:gcc -c jia.c   //生成一个jia.o的目标文件
    第二步:gcc -shared -fPIC -o  libjia.so jia.o  //生成一个动态库libjia.so

5、静态库和动态库的搜索路径和顺序:
  不管是动态库还是静态库都是有连接器ld进行寻找

  5.1 静态连接库:
    1)找gcc命令中参数指定的位置-L
    2)静态环境变量LIBRARY_PATH指定的搜索路径;
    3)默认的静态库的搜索路径/lib
    4)默认的静态库的搜索路径/usr/lib

  5.2 动态链接库:
    1)gcc命令中指定的动态库的搜索路径;
    2)环境变量LID_LIBRARY_PATH指定的搜索路径;
    3)配置文件/etc/ld.so.conf中指定的动态库的搜索路径;
    4)默认的动态库的搜索路径/lib;
    5)默认的动态库的搜索路径/usr/lib;

6、新安装一个库,如何使系统能够找到它
  如果安装在/lib或者/usr/lib下,那么默认连接器ld可以找到,不需要其他的操作;
  如果安装在其他的目录下,需要将其添加到/etc/ld.so.cache文件中,步骤如下:
  第一步:编辑/etc/ld.so.conf文件,加入库文件所在的目录的路径;
  第二步:运行ldconfig,该命令会重建/etc/ld.so.cache文件;



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22593-1-1.html 上篇帖子: Linux 下WordPress FTP帐号解决办法 下篇帖子: Linux 服务的添加删除,自动运行及状态 linux 动态
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表