首页 > 系统相关 >Linux环境中动态库文件(.so文件)的realname,soname和linkname--解释清楚

Linux环境中动态库文件(.so文件)的realname,soname和linkname--解释清楚

时间:2023-12-05 16:12:14浏览次数:27  
标签:文件 realname lib -- soname so name

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)文件什么事了

标签:文件,realname,lib,--,soname,so,name
From: https://www.cnblogs.com/lidabo/p/17877514.html

相关文章

  • golang的蓝牙通信库
    github.com/tinygo-org/bluetooth:TinyGo是一个Go语言编译器,它专注于微控制器和小型计算机系统。这个库是TinyGo项目的一部分,用于支持蓝牙低功耗(BLE)设备。github.com/go-ble/ble:这是一个轻量级的Golang库,旨在简化与蓝牙低功耗设备的交互。它支持多种平台,并提供了一种简单的A......
  • 动态库文件(.so文件)的realname,soname和linkname 介绍和使用说明
    动态库文件(.so文件)的realname,soname和linkname介绍和使用说明介绍动态库文件(.so文件)的realname,soname和linkname介绍编译时设置soname和realname参考makefile设置sonamereadelf查看动态库sonamereadelf-dlibxxx.soreadelf功能介绍 ......
  • 在 macOS 上搭建 Flutter 开发环境
    目录下载FlutterSDK配置Flutter环境变量及镜像检查开发环境参考下载FlutterSDKflutter官网下载:https://flutter.io/sdk-archive/#macos若上述链接无法访问,可通过GitHub下载https://github.com/flutter/flutter/releases将下载的fluttersdk解压到一个地方(这里解压......
  • 08补
    session的十四用cookie客户端浏览器上的键值对----为了做会话保持 -怎么来的?服务端写入的---》服务端再返回的响应头中写入---》浏览器会自动取出来--》存起来-keyvalue形式--》过期时间---》path---》httponly-只要浏览器中有cookie,再次向当前域发送请求,都会自动携......
  • Nginx学习
    准备iptablesiptables是集成在Linux内核中的包过滤防火墙系统。使用iptables可以添加、删除具体的过滤规则,iptables默认维护着4个表和5个链,所有的防火墙策略规则都被分别写入这些表与链中。iptables-L查看当前规则iptables-F关闭规则iptables-tnat-F关闭na......
  • 直播预约丨《实时湖仓实践五讲》第四讲:实时湖仓架构与技术选型
    如今,大规模、高时效、智能化数据处理已是“刚需”,企业需要更强大的数据平台,来应对数据查询、数据处理、数据挖掘、数据展示以及多种计算模型并行的挑战,湖仓一体方案应运而生。《实时湖仓实践五讲》是袋鼠云打造的系列直播活动,将围绕实时湖仓的建设趋势和通用问题,邀请奋战于企业数......
  • SpringBoot实现文件上传下载
    配置在application.yml中添加配置spring:servlet:multipart:enabled:true#表示是否开启文件上传支持,默认为truefile-size-threshold:0#表示文件写入磁盘的阀值,默认为0location:#表示上传文件的临时保存位置max-file-size:1MB#表示上......
  • Python 对树结构数据输出序号(文档目录)层级
    input_data=[{'title':'试验干预中止和参与者退出试验','children':[{'title':'试验干预中止','children':[{'title......
  • 秦疆的Java课程笔记:58 数组 冒泡排序
    总共有八大排序,其中冒泡排序无疑是较为出名的排序算法之一。冒泡排序的代码相当简单,两层循环,外层冒泡轮数,里层依次比较。当看到嵌套循环,应该立马意识到,这个算法的时间复杂度是\(O(n^2)\)。冒泡排序基本步骤:比较数组中两个相邻元素,如果第一个数比第二个数大,就交换位置......
  • 深入了解Linux文件权限
     在Linux系统中,文件权限是保障系统安全性和数据完整性的关键之一。本文将深入讨论Linux文件权限的各个方面,包括基本权限(UGO权限)、基本权限以外的ACL权限、高级权限、文件属性(chattr)以及客户端查询方法。基本权限(UGO权限)在Linux中,每个文件和目录都有一个拥有者(User)、一个用户组(Gro......