(Murphy) Linux 动态库机制概要小结(持续更新ing)


前言

主要介绍一些基础知识和自己学习过程中的几个误区,如果有错漏的地方,烦请指正,一起学习!

所有知识点均基于红帽系统验证过


目录

  动态库编译

  动态库加载

  动态库配置和预加载

  动态库查询

  动态库统一部署

  dlopen的优缺点

  动态库的命名和版本控制


正文

1. 动态库的编译

    a) 生成动态链接库的命令很简单:

    #gcc -shared -fPIC -Wl,-soname,libmosquitto.so.1 mosquitto.o ...  -o libmosquitto.so.1 -Wl,--as-needed -lrt -lssl -lcrypto -lpthread

    #gcc sub_client.o -o mosquitto_sub  -L../lib ../lib/libmosquitto.so.1 -Wl,-rpath,'$ORIGIN'/lib  -Wl,-rpath-link,

     b) "-Wl,soname,${name}", 使用这个参数可能把这个“别名”写到目标文件的ELF头信息中,

     b) "-Wl,--as-needed", 在动态库前面使用这个参数,可以在自动剔除目标文件没有真正使用的库;但是在使用中要注意GCC/G++对目标文件、链接库的顺序问题,以免不当使用引起undefined referenced的错误;

     c) "-Wl, -rpath,${lib-relative-path}", 使用这个参数,添加一个私有的库搜索路径,而不会影响到系统级别的库配置信息(详见动态库搜索路径部分);多个目录之间使用冒号":"硬编码到可执行文件内部; '$ORIGING ',代表程序目录,需要加单引号,否则会被解释为变量ORIGIN的值。这样gcc的链接flags为 “-Wl,-rpath,'$ORIGING'/lib  ”

     d) "-Wl1,-rpath-link,${dir}", 用于链接阶段,如果指定了一个库A,但是库A依赖库B&#x

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值