1. 程式人生 > >so庫又一次遇到 undefined symbol------ldd, nm, c++filt命令大顯身手

so庫又一次遇到 undefined symbol------ldd, nm, c++filt命令大顯身手

       最近發版本, 灰度釋出的時候, 發現程序沒來, 回包自然是異常的。 立即進行版本回退, 發現OK. 

       哪裡出問題了呢? 直接ldd -r libtest.so一下, 就知道了, 原來是缺符號。 看看簡化後的示例程式碼:

#include <iostream>
using namespace std;

class Test
{
public:
	void output();		
};

#if 0
void Test::output()
{
	cout << "output is celled" << endl;
}
#endif

void fun()
{
	Test T;
	T.output();
}
      先編譯成test.o, 然後編譯成libtest.so,  不會有編譯問題, 但如果其他模組來載入libtest.so, 就會有問題。 libtest.so為什麼會有問題呢? 因為沒有符號啊, 看看:
xxxxxx:~> ldd -r libtest.so 
undefined symbol: _ZNSt8ios_base4InitC1Ev       (./libtest.so)
undefined symbol: _ZNSt8ios_base4InitD1Ev       (./libtest.so)
undefined symbol: _ZN4Test6outputEv     (./libtest.so)
undefined symbol: __gxx_personality_v0  (./libtest.so)
        linux-gate.so.1 =>  (0xbfffe000)
        /lib/libonion.so (0xb7faa000)
        libc.so.6 => /lib/libc.so.6 (0xb7e5f000)
        libdl.so.2 => /lib/libdl.so.2 (0xb7e5a000)
        /lib/ld-linux.so.2 (0x80000000)
xxxxxx:~> c++filt _ZN4Test6outputEv
Test::output()
xxxxxx:~> 
       一切一目瞭然。

       再回憶一下, 之前我們遇到過類似問題, 最終發現是makefile中沒有指定對應的靜態庫, 也就無法找到靜態庫中的函式。 其實, 這種情況和上述情況是完全一致的, 總之就是找不到函式的定義, 沒有符號。

       最後說一下, 如果你願意, 用nm命令也可以哈, 如下:

xxxxxx:~> nm -u libtest.so
         U [email protected]@GLIBC_2.1.3
         w [email protected]@GLIBC_2.1.3
         w __gmon_start__
         U __gxx_personality_v0
         w _Jv_RegisterClasses
         U _ZN4Test6outputEv
         U _ZNSt8ios_base4InitC1Ev
         U _ZNSt8ios_base4InitD1Ev
xxxxxx:~> c++filt _ZN4Test6outputEv
Test::output()
xxxxxx:~> 

       不多說。

相關推薦

so遇到 undefined symbol------ldd, nm, c++filt命令大顯身手

       最近發版本, 灰度釋出的時候, 發現程序沒來, 回包自然是異常的。 立即進行版本回退, 發現OK.         哪裡出問題了呢? 直接ldd -r libtest.so一下, 就知道了, 原來是缺符號。 看看簡化後的示例程式碼: #include <

redis被刪跑路,索要0.6比特幣

還在和媳婦兒逛街,突然同事打來電話說redis庫被清空。 於是,媳婦兒說你真是烏鴉嘴,早上還說redis如何被提權的事情。 怎麼剛出來就碰上了? 會不會是你搞的? 於是無形中又背鍋了。 見×××姐如此著急,邊安慰,邊提醒讓同事查一下,是什麼時候發生的事情,受害面積有多大? 但是×××姐很鎮靜的說,

SAP query傳輸以後須要生成程序

stand 發現 div 控件 沒變化 通過 們的 本地 environ 近期有個需求,須要改動一個Query,在DEV改動好並測試通過後。傳輸到QAS,可是報表還是沒變化,著實郁悶了一下,這是萬能的google幫上忙了,原來傳到其它系統以後還須要generate pr

Android有關surfaceView創建的問題。

視頻播放器 android pan layer 狀態 style 又一 一次 space 近期在做一個Android視頻播放器的項目。遇到一個問題,就是鎖屏之後。surfaceview就會被銷毀掉,然後就會出現各種錯誤。到csdn論壇去發帖提問,各種所謂的大神都說,解鎖

怎樣編譯linux內核

聲卡 class 補丁 相關 穩定 主板 inux 系統 內容 linux作為自由軟件。在廣大愛好者的支持下,內核版本號不斷更新。新的內核修訂了就得內核的bug,並添加了很多新的特性。假設用戶須要使用這些新的特性或者依據自己的系統量身定做一個更高效或更穩定的內核,就須要

[Linux]RedHat Linux 忘記rootpassword該怎樣設置password

再次 trac fill center 命令 fontsize ack src 編輯 1. 開機在出現grub畫面,按e鍵,例如以下圖所看到的: 2. 用上下鍵選中第二項(可能不太一樣)。然後按e鍵編輯,輸入空格 single 按Enter鍵

Android對apk源代碼的改動--反編譯+源代碼改動+打包+簽名【附HelloWorld的改動實例】

str 技術 命令行 文章 color 不同的 pop ogl 方法 最近遇到了須要改動apk源代碼的問題,於是上網查了下相關資料。編寫了HelloWorld進行改動看看可行性,經過實驗證明此方案可行,而且後來也成功用這種方法對目標apk進行了改動,僅僅只是

maven自己主動編譯,解決你每次代碼改動須要編譯的繁瑣

mvn clean span ng- ips 每次 servlet trac 問題 文件夾 maven結構的項目,我們在每次改動代碼後都會須要手動編譯,以下命令能夠解決此問題。僅僅要代碼改動。會自己主動幫你編譯。 進入項目文件夾運行:mvn -U eclipse:

Mysql整理筆記--woods備忘

筆記 com 不支持 刪除數據庫 科技 where ima bin insert語句 ==============================SQL備忘 CRUD 查詢 多表 事件等=============================== -

java this 子類調父類,父類再調用子類已覆蓋的方法及屬性(理解)

views args pop word per ews nds 如果 ext 之前一直以為 this關鍵字 是指調用者對象,但是這次才真正理解,this代表當前對象,但是指向調用者對象,其實就是多態的用法,如下所示:B 繼承了 A,在B 中調用A類的方法,在A 中用this

android系統刷ROM簡記(

recover com linu nsf 配置文件 loader ref 編寫 例如 當須要對android系統進行大刀闊斧的改造的時候,應該清晰的了解android各個image的組成才幹做到庖丁解牛。

mycat垂直分庫、垂直分片:mycat的多表跨實戰

mycat垂直分庫: userinfo庫包括,表user、表company userorder庫包括:表order 涉及多表查詢:  配置如下:schema.xml配置如下: <?xml version="1.0"?> <!DOCTYPE mycat:

換血見成效!北京迎來雙子星後人才井噴

@央廣軍事11月10日訊息,2018中國航展上首次公開展出的“瞭望者Ⅱ”察打一體導彈無人艇,是剛剛成功進行首發導彈飛行試驗命中靶心的實艇,試驗成功後隨即吊裝到展位與公眾見面。據媒體此前報道,該艇是中國第一艘導彈無人艇,也是繼以色列拉斐爾海上騎士後全球第二個成功發射導彈的無人艇,填補了國內導彈無人艇這一技術空白

C語言基礎下的C++入門---極其絕望的入門,不過這次一定是最後入門!!!!!

小程式的入門(一)~~!!  #include<iostream> using namespace std;//名稱空間 相當於 #include<iostream.h> -->> C92版本 int addArray(int *addArr

雲serverlinux掛載指定資料夾(非擴充)

新買的香港雲server。系統僅僅能在商家的控制檯上安裝。 系統和硬碟分開的,根資料夾空間僅僅有10G。須要又一次設定相關資料夾的大小。如:/usr、/var、/home等。 下面是自己的解決方法小計。 一、初始的分割槽情況(外加一個300G未分割槽的硬

觀點:恆大輸在\"針對性\"上 準備不如上港充分

“90後”女大學生放棄北大保送復旦!她到底有多厲害?  東北網12月6日訊(記者 姜姍姍) 在東北農業大學有這樣一個自強不息的女大學生,她放棄北大直博被保送到復旦大學藥學院。她本科期間獲得國家獎學金、國家勵志獎學金、新東方自強獎學金、第一屆全國大學生生命聯賽國家二等獎……被評為黑龍江省“三好學生”。她就是生命

大資料環境下,我們被賣了

大資料,人工智慧是當下網際網路最熱門的話題。 拋開大資料的人工智慧都是耍流氓,人工智慧需要大資料作為基礎支援。 大資料是1980年,著名未來學家阿爾文·托夫勒便在《第三次浪潮》一書中,將大資料熱情地讚頌為“第三次浪潮的華彩樂章”。大約從2009年開始,“大資料”成為網際網路資訊科技行

大數據環境下,我們被賣了

需要 社會 標簽 行為 移動互 共享 基於 網信 海量 大數據,人工智能是當下互聯網最熱門的話題。 拋開大數據的人工智能都是耍流氓,人工智能需要大數據作為基礎支持。 大數據是1980年,著名未來學家阿爾文·托夫勒便在《第三次浪潮》一書中,將大數據熱

的被相同問題搞得心力交瘁

。。今天突然想開啟oracle創個表,發現plsql一直登不進去。報無監聽程式。這個以前遇到n次的錯誤,大半年沒搞,全忘記了。沒辦法,百度一搜,各種搞,沒解決。想起來我裝了客服端和服務端兩個 前前後後設定有沒有衝突,心想我還是寫在一個重新裝,就把兩個都解除安裝了。關服務,oracle程式解除安裝

最近總結

上次總結是在年底,這次總結貌似來的有點快,只是最近有點不太順利而已,所以就發發感慨。最近犯的錯誤不大不小,但是影響面比較大,對外網玩家造成了很多問題,其實有時候想想玩家也很可憐,花錢了,還被我們這樣折騰,覺得很對不起這些玩家。任何程式設計師都想自己寫出來的東西可以給更多的人使用,像我這種遊戲程式設計師自然是希