DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

 

realname:

  • 实际等同于库文件的filename,是在库文件生成时就被指定的,如:gcc -shared -o $(realname) dependence flags
  • realname的一般格式为 lib$(name).so.$(major).$(minor).$(revision),$(name)是动态库的名字,$(major).$(minor).$(revision)分别表示主版本号,子版本号和修正版本号

soname:

  • 在库文件生成时被指定,如:gcc -shared -o $(realname) dependence flags -Wl,-soname,$(soname)
  • 其一般格式为lib$(name).so.$(major).$(minor),soname会被写入库文件中
  • 可以使用readelf -d $(realname)查看库文件的soname
  • 不同realname的库文件可以有相同的soname,有利于库文件的升级和兼容,例如当版本从1.0.0升级到1.0.1,库文件的接口没有变化(或者接口增加,但原有接口不变)的情况下,可以指定相同的soname,这样使用1.0.0生成的程序仍然可以运行。
  • soname在链接和加载库文件时使用,当时使用-l$(name)链接库文件时,链接器会读取lib$(name).so文件中的soname值,并将其记录在生成的程序中,当运行程序时,会从相应的目录加载名为$(soname)的文件,所以,在运行程序之前,$(soname)的库文件必须已生成,
  • 可以采用软连接的方式生成该文件,如:ln -s $(realname) $(soname)
  • 也可以使用ldconfig命令自动生成,如 ldconfig -n $(dir) 会生成$(dir)目录下所有库文件对应的$(soname)文件

linkname:

  • 在链接时使用,一般格式为lib$(name).so,通常是$(realname)文件或者$(soname)文件的软链接
  • 当使用-l$(name)选项时,链接器会从相应目录链接lib$(name).so的文件,如果该文件不存在,则会链接lib$(name).a文件,如果该文件也不存在,会发生链接错误
  • 如果链接的是lib$(name).a文件,在运行程序时也就没$(realname)文件和$(soname)文件什么事了
 
posted on   DoubleLi  阅读(252)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2022-01-17 kafka系统设计原理,看这一篇就够了
2019-01-17 千万级规模高性能、高并发的网络架构经验分享
2019-01-17 Code::Blocks 导入Makefile工程
2015-01-17 linux下监视进程 崩溃挂掉后自动重启的shell脚本
2015-01-17 Linux中service命令和/etc/init.d/的关系
2013-01-17 eclipse下载安装与配置 myeclipse下载安装与配置 tomcat安装与配置
点击右上角即可分享
微信分享提示