链接库导致Crash问题分析

news/2024/7/24 6:46:46 标签: linux, 链接库crash, crash, 崩溃, 只链接了库

问题现象:

最近和第三方开发软件功能,他们提供封装库给到我们,我们这边链接他们给的库之后,调用库中函数接口开发,软件编译跑起来之后正常,但是在调用我们这边系统库某个函数的时候会发生crash,并且多次测试crash位置不变。

问题分析:

crash发生在调用我们这边库函数的时候,首先怀疑是我们添加的代码有问题,仔细排查未找到异常点,索性直接把代码还原,编译的时候还是链接第三方库,结果还是会出现crash问题。这时候有点思路了,怀疑是不是第三方库和我们系统库有重名问题,重新编译代码,并且在编译的时候添加上-Wl,--as-needed参数,编译出执行文件之后,通过ldd查看到可执行文件还是依赖第三方库,这个时候确认就是重名问题引起了。

 -Wl,--as-needed:指示最终的可执行文件中只包含必要的链接库信息

问题结论:

最后排查下来原因是第三方也会用到我们这边库,并且我们提供的是静态库,由于合作方案多,他们打包库给我们的时候链接错库,即A方案的库用到了B方案。我们使用的时候刚好也把他们的库放到了系统库前面。导致软件跑起来之后调用系统库函数的时候直接调用了他们库里面的函数,但是他们库里面的函数是其它方案的,这样就引起了crash

问题措施:

重新提供一份对应的库给他们打包,再编译升级就正常了。


http://www.niftyadmin.cn/n/4995068.html

相关文章

linux定时删除服务器日志

不说废话。直接进入操作流程 linux 定时任务是用的crontab 查看 crontab是否启动 service crond statusdead 死的 启动crontab service crond start 再次查看状态 running 运转的 查看 crontab cat /etc/crontab 查看 crontab任务 crontab -l 编辑 crontab任务 crontab …

PPT分享:EasyDarwin行业赋能 | 一种效率提升10倍的音视频开发方法

EasyAVFilter本质上就是将ffmpeg.exe改造成了动态库, 方便应用程序集成ffmpeg的各项功能; 详细信息可以直接看https://www.easydarwin.org/tools/153.html,具体用法和场景,看视频介绍;

系统架构技能之设计模式-抽象工厂模式

一、上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式。并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建。 工厂模式&…

Python库-coverage测试覆盖率

Coverage.py 是用于测量Python程序代码覆盖率的工具。它 监视程序,注意代码的哪些部分已执行,然后 分析源以识别可以执行但未执行的代码。 覆盖率测量通常用于衡量测试的有效性。它 可以显示测试正在执行代码的哪些部分,以及哪些部分是 不。…

用svg path 绘制梯形

使用 SVG path 绘制梯形也很简单。下面是一个示例代码&#xff1a; <svg width"200" height"100"><path d"M 20 10 L 180 10 L 150 80 L 50 80 Z" /> </svg>在这个示例中&#xff0c;我们使用了一个 <path> 元素来绘制…

2359. 找到离给定两个节点最近的节点;1781. 所有子字符串美丽值之和;2406. 将区间分为最少组数

2359. 找到离给定两个节点最近的节点 核心思想:统计node1和node2分别到每个点的距离&#xff0c;然后在枚举每个点统计结果。关键在于如何统计node到每个点的距离&#xff0c;首先是初始化为inf很重要&#xff0c;因为在枚举的时候&#xff0c;因为是inf代表了这个节点无法到达…

js如何遍历对象的key和value

在JavaScript中&#xff0c;可以使用for…in循环来遍历对象的键&#xff08;key&#xff09;和值&#xff08;value&#xff09;。以下是一个示例&#xff1a; let obj { key1: value1, key2: value2, key3: value3 }; for (let key in obj) { if (obj.hasOwnProperty…

shell脚本中时间的编写规范20230902

背景&#xff1a;经常写shell&#xff0c;但是很多种时间格式规范真是记不住哈&#xff0c;&#x1f604;&#xff0c;索性记录一下 一、 获取-年 下面的这两种写法都成 year$(date "%Y") yeardate "%Y"echo -e "测试输出 年: ${year}"输出结…