首页 > ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪

ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪

问题场景

我基于ATS 6.2.1社区版整合进一些插件,发现debug版本一直运行好好的,后来改为release版本(就是configure时不加--enable_debug)时,安装后显示下面的出错信息

[May 11 11:33:18.659] Server {0x2ab7cd116700} ERROR: [ReverseProxy] failed to add remap rule at /etc/trafficserver/remap.config line 206: Can't load plugin "/usr/lib64/trafficserver/plugins/libtsrefinequery.so" - /usr/lib64/trafficserver/plugins/libtsrefinequery.so: undefined symbol: _ZN17RefineQueryConfig7IsWhiteEv

这会ATS反复重启,后果非常严重!



问题定位

根据报错的信息,找到源码Remap.config.cc中的相应代码位置

remap_parse_config_bti()

remap_load_plugin()

dolmen()

dlerror()

发现这里的报错信息实质是就是,dlopen调用一个插件的so,发现里面没有需要的符号信息,就报这里的错误



问题分析

1.一些无谓的摸索

上述场景写个demo就能验证出来,所以网上的观点集中在,没有加载到动态库之类的简单问题,仔细分析之后,发现都不太切合我的问题场景。因为这里的出错信息已经明确说,

已经找到动态库,都是没有里面的符号_ZN17RefineQueryConfig7IsWhiteEv

2.debug版本一切正常,但是release版本就有这个问题

3.将debug版本中的libtsrefinequery.so覆盖release版本中的同名动态库,发现正常



最自然最直接的方法,我最后觉得还是直接分析动态库中的符号差异,比较接地气。



linux 查看so文件导出的符号 

#nm -D ****.so,

#nm ****.a

下面是nm对应的用法



下面是对比两个动态库中的符号差异





查明原因

通过研究该插件中的相关源码,发现一个可疑点



在一个c文件中定义的inline函数是不能在其它c文件中直接使用.也就是,这个inline会使编译器的行为产生一些差异。





解决方法

去掉该inline

下面是去掉inline之后重新打包安装之后的动态库符号表对比图,发现_ZN17RefineQueryConfig7IsWhiteEv由原来的W类型变为了T类型,这正是我们需要的结果。



再次安装确认,debug和release版本都统一了,没有问题。



参考文献

[1].http://blog.csdn.net/qq_34488499/article/details/51873341

[2].http://daisy8867.blog.51cto.com/1043582/1201568/

[3].http://blog.csdn.net/shuanghujushi/article/details/23025055

更多相关:

  • 重启一下系统,让内核版本变更生效...

  • FlashDevelop是基于.NET框架的开源软件,只能在Windows环境下面运行,相较于Flash CS和FlexBuilder, 它非常轻量级。FlashDevelop只是一个代码编辑器,而不是完整的IDE,在安装FlashDevelop同时,还应该安装Flex SDK和Flash Player Debug版本。之所以要研究这...

  • 我先后试用了longterm团队的2013版本,参见本博链接 http://blog.csdn.net/tao_627/article/details/17524597 和麒麟官网给出的这个改进版本,参见链接 http://www.ubuntukylin.com/applications/showimg.php?lang=cn...

  • ubuntu18.04操作系统版本先已支持在线的内核版本升级,到目前为止18.04发布版已经拥有三个小版本了1,2,3。 其中18.04.01和18.04.03版本,安装好之后默认的是4.15内核版本,但是默认支持在线安装4.18和5.0.0内核版本。 具体升级步骤如下: 升级前备份当前系统镜像确认外网可用,同时配置好任意一个国内...

  • 好吧,纯粹是去玩玩的,我这么一个弱省的蒟蒻,进队纯粹是开玩笑。。。。 Day0 去五中试机,感觉电脑手感不错,打了半个线段树的板子才发现试机要在自己的电脑上试,然后我无奈的搬东西(从26号搬到2号),刚一坐下登上洛谷发现被“%”刷屏,????发现不知道哪个家伙拿着26号电脑发了一大堆“”%,。。。靠!!!机房惨案!!心情一下子坏了,模...

  • 这是学习笔记的第 2103 篇文章 最近碰到了一个奇怪的权限问题,问题的背景是业务同学反馈在下班后,有一个数据表出现了阻塞,导致后续的业务流程都产生了拥堵,在对这个问题进行分析发现,业务同学所谓的拥堵,阻塞是数据库连接出了问题。当然我们进行了一些深入的沟通,对整个问题的情况有了一个更为清晰的了解。    6:30左右,业务同学发现...

  • 今天我将为大家介绍逻辑回归的含义并展示Pytorch实现逻辑回归的方法,先我们来看看一个问题。问题: 大家想必对MNIST数据集已经非常熟悉了吧?这个数据集被反复“咀嚼”,反复研究。今天我们将换个角度研究MNIST数据集。假设现在不使用卷积神经网络,又该使用什么方法来解决MNIST分类问题呢?一、观察数据 在开始分析数据问题之前,我...

  • 写在前面 最近公众号的活动让更多的人加入交流群,尝试提问更多的我问题,群主也在积极的招募更多的小伙伴与我一起分享,能够相互促进。 这里总结群友经常问,经常提的两个问题,并给出我的回答: (1)啥时候能出教程,能够讲解PCL中的各种功能? (2)如何解决大规模点云的问题呢?   以下给出正式的解答以及计划安排 问题1:对于...

  •   我刚刚开始接触PCL,懂的东西也很少,所以总是出现各种各样的问题,每次遇见问题的时候要查找各种各样的资料,很费时间。所以,今天我把我遇见的常见问题分享给大家,讲解的步骤尽量详细,让和我一样基础差的小伙伴能尽快进入到PCL点云库的学习中,希望能和大家进步。 运行环境:PCL-1.8.0-AllInOne-msvc2013-win...

  • 这篇博文中主要收集我开发过程中遇到的Makefile相关的问题, 以免自己日后再犯类似的错误. 今天就遇到一个很弱的问题, Makefile显示如下错误: 出现该问题是因为我写错了标注处的代码: $和()之间有空格了, 这里必须是$(), 不能有空格的...