ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪
生活随笔
收集整理的這篇文章主要介紹了
ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
問題場景
我基于ATS 6.2.1社區(qū)版整合進一些插件,發(fā)現(xiàn)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
問題定位
根據(jù)報錯的信息,找到源碼Remap.config.cc中的相應代碼位置
remap_parse_config_bti()
remap_load_plugin()
dolmen()
dlerror()
發(fā)現(xiàn)這里的報錯信息實質(zhì)是就是,dlopen調(diào)用一個插件的so,發(fā)現(xiàn)里面沒有需要的符號信息,就報這里的錯誤
問題分析
1.一些無謂的摸索
上述場景寫個demo就能驗證出來,所以網(wǎng)上的觀點集中在,沒有加載到動態(tài)庫之類的簡單問題,仔細分析之后,發(fā)現(xiàn)都不太切合我的問題場景。因為這里的出錯信息已經(jīng)明確說,
已經(jīng)找到動態(tài)庫,都是沒有里面的符號_ZN17RefineQueryConfig7IsWhiteEv
2.debug版本一切正常,但是release版本就有這個問題
3.將debug版本中的libtsrefinequery.so覆蓋release版本中的同名動態(tài)庫,發(fā)現(xiàn)正常
最自然最直接的方法,我最后覺得還是直接分析動態(tài)庫中的符號差異,比較接地氣。
linux 查看so文件導出的符號?
#nm -D ****.so,
#nm ****.a
查明原因
解決方法
我基于ATS 6.2.1社區(qū)版整合進一些插件,發(fā)現(xiàn)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反復重啟,后果非常嚴重!
問題定位
根據(jù)報錯的信息,找到源碼Remap.config.cc中的相應代碼位置
remap_parse_config_bti()
remap_load_plugin()
dolmen()
dlerror()
發(fā)現(xiàn)這里的報錯信息實質(zhì)是就是,dlopen調(diào)用一個插件的so,發(fā)現(xiàn)里面沒有需要的符號信息,就報這里的錯誤
問題分析
1.一些無謂的摸索
上述場景寫個demo就能驗證出來,所以網(wǎng)上的觀點集中在,沒有加載到動態(tài)庫之類的簡單問題,仔細分析之后,發(fā)現(xiàn)都不太切合我的問題場景。因為這里的出錯信息已經(jīng)明確說,
已經(jīng)找到動態(tài)庫,都是沒有里面的符號_ZN17RefineQueryConfig7IsWhiteEv
2.debug版本一切正常,但是release版本就有這個問題
3.將debug版本中的libtsrefinequery.so覆蓋release版本中的同名動態(tài)庫,發(fā)現(xiàn)正常
最自然最直接的方法,我最后覺得還是直接分析動態(tài)庫中的符號差異,比較接地氣。
linux 查看so文件導出的符號?
#nm -D ****.so,
#nm ****.a
下面是nm對應的用法
查明原因
通過研究該插件中的相關源碼,發(fā)現(xiàn)一個可疑點
解決方法
去掉該inline
下面是去掉inline之后重新打包安裝之后的動態(tài)庫符號表對比圖,發(fā)現(xiàn)_ZN17RefineQueryConfig7IsWhiteEv由原來的W類型變?yōu)榱薚類型,這正是我們需要的結果。
再次安裝確認,debug和release版本都統(tǒng)一了,沒有問題。
[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
總結
以上是生活随笔為你收集整理的ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在rMBP上利用Python的oneti
- 下一篇: centos 6.8 x86_64下au