realname,soname和linkname

news2024/11/27 18:38:41

背景

当在看/lib下的一些文件时候,我们发现几乎都是三个动态库文件,为啥?
在这里插入图片描述

分析

当我发布一个动态库的时候,比如版本是maj.min.patch(10.2.1)的格式,当我改了小版本的号的时候(10.3.1),如果厂家A用的是我写的库,他需要做什么?

  • maj大版本修改,厂家A需要修改他的CmakeList.txt, 因为之前是-libA.so.10.2.1, 现在需要改成-libA.so.10.3.1
  • 打的小补丁,休休小bug, 按道理说厂家A不用重新编译

如何解决

  • 为了厂家A不需要修改任何编译选项,所以最好有一个没有版本的名字,那就叫做A.so吧。那么我就整个A.so软链接到A.so.10.3.1就可以了。理论上这个就完事了,很简单.
  • min版本,或者小补丁不需要A重新编译咋办? 我们知道实际在编译链接过程的时候,连接器会读取A.so.10.3.1的一个字段soname的值,并且把这个值拷贝到可执行文件中的soname字段里,所以当实际执行的时候,可执行文件会查找soname这个文件在不在,假如我们没有指定soname这个值,那么厂家A生成的可执行文件里的soname就是A.so.10.2.1, 所以执行的时候还是找这个名字,可想而知版本号一变化就会失败,因此需要一个通用的名字,那么就起名字为A.so.10,实际不管我在发布A.so.10.2.1还是A.so.10.3.1的时候,都指定soname为A.so.10, 那么厂家A在生成自己的可执行文件的时候就会把A.so.10拷贝到可执行文件里面,所以每次执行的时候都会找A.so.10这个文件在不在。

疑问

其实soname设置为A.so也是可以的,这样的话,如果我更新为11的大版本后,理论上厂家A还是可以运行可执行文件,但是我版本变动太大,A在实际生产中会报错,为了把风险控制在可执行文件启动前,所以可执行文件的soname最好有版本号,这样程序会启动失败,提醒你却是版本10的so

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1257130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客网刷题笔记四 链表节点k个一组翻转

NC50 链表中的节点每k个一组翻转 题目: 思路: 这种题目比较习惯现在草稿本涂涂画画链表处理过程。整体思路是赋值新的链表,用游离指针遍历原始链表进行翻转操作,当游离个数等于k时,就将翻转后的链表接到新的链表后&am…

【Flutter 常见问题系列 第 1 篇】Text组件 文字的对齐、数字和字母对齐中文

TextStyle中设置height参数即可 对齐的效果 Text的高度 是根据 height 乘于 fontSize 进行计算的、这里指定heiht即可、不指定的会出现 无法对齐的情况,如下: 这种就是无法对齐的情况

成为AI产品经理——模型评估(混淆矩阵)

一、混淆矩阵 1.混淆矩阵的介绍 混淆矩阵有两个定义positive(正例)和negative(反例)。分别代表模型结果的好和坏。 下图就是一个分类问题的混淆矩阵。横行代表真实的情况,而竖行代表预测的结果。 为了便于理解&…

原神「神铸赋形」活动祈愿现已开启

亲爱的旅行者,「神铸赋形」活动祈愿现已开启,「单手剑静水流涌之辉」「法器碧落之珑」概率UP! 活动期间,旅行者可以在「神铸赋形」活动祈愿中获得更多武器与角色,提升队伍的战斗力! 〓祈愿时间〓 4.2版本更…

VS2022 17.8: Build Insights 中的函数视图

简述 今天,我们很高兴的宣布在 Visual Studio 中为 Build Insights 新增了一项新功能:函数视图(Functions View)。 此功能在 Visual Studio 2022 v17.8 版本中可用。函数视图可以为你的代码库中的函数和强制内联(For…

C++学习之路(四)C++ 实现简单的待办事项列表命令行应用 - 示例代码拆分讲解

本期示例介绍: 本期示例《待办事项列表应用》展示了一个简单的任务管理系统,用户可以通过命令行界面执行添加任务、删除任务和显示任务列表等操作。 功能描述: 添加任务功能: 用户可以输入任务描述,将新的任务添加到任务列表中。…

基于SpringBoot+Vue的蛋糕商城【源码好优多】

简介 蛋糕商城首页、注册、登录、浏览商品、购物车、下单、收藏商品、个人中心、管理员登录、角色管理、日志管理、菜单管理、轮播图管理、商品类别管理、商品管理、用户管理、订单管理、收货地址管理等功能模块。 项目目录 数据库 首页 用户注册 登录 商品详情 个人信息 购物车…

【第二节:微信小程序 app.json配置】微信小程序入门,以思维导图的方式展开2

以思维导图的方式呈现出来,是不是会更加直观一些呢 如果看不清楚,私信给单发 : 第二节:微信小程序 app.json配置: 包括: window pages tabBar networkTimeout debug 如下图所示: 2、ap…

常见树种(贵州省):022绣线菊、月月青、金合欢、胡枝子、白刺花

摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、绣线菊…

linux之下安装 nacos

1 下载地址 也可使用在线下载wget https://github.com/alibaba/nacos/releases/download/1.4.6/nacos-server-1.4.6.tar.gzTags alibaba/nacos GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud nativ…

SWT/Jface(3): 表格中添加超链接

背景 实际业务中经常需要展示某个网站, 并且希望在展示的时候单击网站可直接访问, 本节演示在表格中如何添加超链接支持. 需求 假设我需要渲染一个Study类, 它只有三个属性id,name和website, 其中id只支持展示, name只支持编辑, 而website只支持单击时跳转到相应的网站, 效果…

软件介绍02- flameshot截图软件(linux系统可用)

1 软件介绍 在Windows和mac平台一直都使用着snipaste截图,非常好用,又能够钉图。遗憾是并没有开发linux版本,真不知道为什么。 好在终于找到一款截图软件,flameshot截图软件,可以平替snipaste。 下载网址:…

kali linux英文改中文

如果英语基础较好的同学可以不用调整 反之则需要 找到终端(就是输入命令的那个地方 如下)点击它出现命令终端 切换为root用户,命令为: sudo dpkg-reconfigure locales 然后回车 找到这个zh_CN 然后回车 鼠标下键选中并且回车 输…

【RTP】1: RTPSenderAudio::SendAudio

RTPSenderAudio 可以将一个opus帧封装为rtp包进行发送,以下是其过程:RTPSenderAudio::SendAudio :只需要提供payload部分 创建RtpPacketToSend 并写入各个部分 填充payload部分 sender 本身分配全session唯一的twcc序号 if (!rtp_sender_->

Linux系统---僵尸进程、孤儿进程

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 键盘敲烂,年薪百万! 有了上一篇博客的学习,我们已经简单了解了进程的基础知识,今天我们再来学习两个特殊的进程,僵尸进程和孤儿进程。 …

【STL】string类 (下)

目录 1,insert 2,erase 3,find 4,replace 5,rfind 6,substr 7,find_first_of 8,find_first_not_of 9,find_last_of 10,operator 11,ge…

mysql从库设置为只读

直奔主题,mysql设置为只读后,无法增删改。 设置命令: mysql> set global read_only1; #1是只读,0是读写 mysql> show global variables like %read_only%; 以下是相关说明: 1、对于数据库读写状态&#xf…

[C/C++]数据结构 堆的详解

一:概念 堆通常是一个可以被看做一棵完全二叉树的数组对象,它是一颗完全二叉树,堆存储的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并且需要满足每个父亲结点总小于其子节点(或者每个父亲结点总大于其子节点) 堆可以分为两种: 小堆: 任意一个父亲节点都小于其子…

【docker系列】docker高阶篇

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Flask WTForms 表单插件的使用

在Web应用中,表单处理是一个基本而常见的任务。Python的WTForms库通过提供表单的结构、验证和渲染等功能,简化了表单的处理流程。与此同时,Flask的扩展Flask-WTF更进一步地整合了WTForms,为开发者提供了更便捷、灵活的表单处理方式…