ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪
来源:互联网 发布:linux qt调试器未设置 编辑:程序博客网 时间:2024/06/04 01:13
问题场景
我基于ATS 6.2.1社区版整合进一些插件,发现debug版本一直运行好好的,后来改为release版本(就是configure时不加--enable_debug)时,安装后显示下面的出错信息
[May 11 11:33:18.659] Server {0x2ab7cd116700} ERROR: <RemapConfig.cc:1360 (remap_parse_config_bti)> [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
问题定位
根据报错的信息,找到源码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
查明原因
解决方法
我基于ATS 6.2.1社区版整合进一些插件,发现debug版本一直运行好好的,后来改为release版本(就是configure时不加--enable_debug)时,安装后显示下面的出错信息
[May 11 11:33:18.659] Server {0x2ab7cd116700} ERROR: <RemapConfig.cc:1360 (remap_parse_config_bti)> [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对应的用法
查明原因
通过研究该插件中的相关源码,发现一个可疑点
解决方法
去掉该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
0 0
- ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪
- 打jar包时 出现的问题
- 关于解决工程编译出现Undefined symbol __use_two_region_memory 和Undefined symbol __initial_sp的问题
- 解决apcu-bc在安装中出现的问题。 今天在编译安装apcu-bc时出现了:apc.so: undefined symbol: zif_apcu_store in Unknown on line 0
- ATS插件开发中内存泄露问题的解决方法探讨
- 产品打包工具的制作,ant,编译源码,打jar包,打tag,打war包,备份release版本等
- linux下开发,解决cocos2d-x中编译出现的一个小问题, undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
- ATS插件中常见的字符串操作1
- 动态链接时出现undefined symbol错误
- 使用pycocotools时出现"undefined symbol: _Py_ZeroStruct"
- 解决mingw动态库在vs下调用 release版本中会出现的奇怪问题
- VC发布release版本出现问题的解决方案!
- opencv出现不能运行release版本的问题
- 关于安装Cmake软件出现的"undefined reference to symbol 'keypad'"问题
- apache重启时undefined symbol: apr_global_mutex_lockfile的问题
- 如何打rpm包
- Redhat中制作RPM包出现的奇怪现象
- 调试release版本程序dump时出现的代码定位不准确问题
- Android Fragment完全解析
- 显卡内存一直被占用解决方式
- Maven对重复依赖的解决方案
- HDU 1040 JAVA
- Maven profile介绍
- ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪
- 【数据库】1库、引擎、约束、表、字段、数据
- UML建模详解
- bindingSource具体使用案例
- 数组操作(2)-二维数组
- 一种判断文件存在的方法
- input中text和password文本框的常用参数
- 【学习路线】最新Java开发资料汇总(持续更新ing)
- LinkedIn是如何优化Kafka的