青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

一、案例

???? 編譯出一個動態庫.libXXXEngine.so。然后直接在另一個工程中,把頭文件include進來,并link到該庫:-lXXXEngine.

嘗試編譯,出錯:

.//libXXXEngine.so:undefined reference to`CHttpParser::GetCurrentHttpMethod(http_method_t&)'

?

.//libGenaEngine.so: undefined reference to `CHttpParser::CHttpParser(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
.//libGenaEngine.so: undefined reference to `CHttpParser::ExactResultFromHttpMsgBody(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
.//libGenaEngine.so: undefined reference to `CHttpParser::parse(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status


從描述上看,以下四個函數沒有定義:

?

(1) CHttpParser::GetCurrentHttpMethod(http_method_t&)

(2)CHttpParser::CHttpParser(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)

(3)CHttpParser::ExactResultFromHttpMsgBody(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'

(4)CHttpParser::parse(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)

?

然而奇怪的是,當我跟進libXXXengine.so的具體代碼時,卻發現頭文件和源文件的定義和聲明都可以找到。 那么究竟什么原因呢?


二 問題分析

??? 出現這種錯誤,有幾個原因:

(1)一是使用者自己定義的函數或者全局變量所在源代碼文件,沒有被編譯、連接。

(2)一是使用者自己定義的函數或者全局變量沒有定義。

(3) 未定義的符號是一個動態庫函數,在源程序中使用了該庫函數,而連接過程中還沒有給定相應的函數庫的名稱,或者是該檔案庫的目錄名稱有問題.

即:.so文件沒有把所有需要的庫都鏈接上。使用了庫中定義的實體,但沒有指定庫(-lXXX)或者沒有指定庫路徑(-LYYY),會導致該錯誤,

(4)C/C++相互依賴和鏈接
gcc和g++編譯結果的混用需要保證能夠extern "C" 兩邊都可以使用的接口,在我們的64位環境中gcc鏈接g++的庫還需要加上 -lstdc++。

???? 經排查,我們在makefile中通過-lXXEngine正確鏈接了libXXXEngine.so,同時,我們也把相應的頭文件放到我當前工程目錄下了。然而,被告知且出錯的函數都是在動態庫中的。好奇怪!

??? 為了進一步找到問題的root cause,我們使用了nm命令來進一步排查:

nm libXXXEngine.so |grep? C HttpParser

?

????????????? U _ZN11CHttpParser20GetCurrentHttpMethodER13http_method_t
???????????????? U _ZN11CHttpParser26ExactResultFromHttpMsgBodyESsRSs
???????????????? U _ZN11CHttpParser5parseESs
???????????????? U _ZN11CHttpParserC1ESs

00000000000134e6 W _ZN5boost10shared_ptrI11CHttpParserE4swapERS2_
0000000000012e56 W _ZN5boost10shared_ptrI11CHttpParserEC1ERKS2_
0000000000012e30 W _ZN5boost10shared_ptrI11CHttpParserEC1Ev
0000000000014cda W _ZN5boost10shared_ptrI11CHttpParserEC1IS1_EEPT_
0000000000012cda W _ZN5boost10shared_ptrI11CHttpParserED1Ev
0000000000013df4 W _ZN5boost10shared_ptrI11CHttpParserEaSERKS2_
000000000001348b W _ZN5boost14checked_deleteI11CHttpParserEEvPT_
0000000000014c4c W _ZN5boost6detail12shared_countC1I11CHttpParserEEPT_
0000000000013bae W _ZN5boost6detail17sp_counted_impl_pI11CHttpParserE11get_deleterERKSt9type_info
0000000000013b92 W _ZN5boost6detail17sp_counted_impl_pI11CHttpParserE7disposeEv
0000000000013452 W _ZN5boost6detail17sp_counted_impl_pI11CHttpParserEC1EPS2_
0000000000014d1e W _ZN5boost6detail17sp_counted_impl_pI11CHttpParserED0Ev
0000000000014d5a W _ZN5boost6detail17sp_counted_impl_pI11CHttpParserED1Ev
000000000001591c W _ZNK5boost10shared_ptrI11CHttpParserEptEv
00000000000134b4 W _ZSt4swapIP11CHttpParserEvRT_S3_
000000000021ba40 V _ZTIN5boost6detail17sp_counted_impl_pI11CHttpParserEE
0000000000017420 V _ZTSN5boost6detail17sp_counted_impl_pI11CHttpParserEE
000000000021ba00 V _ZTVN5boost6detail17sp_counted_impl_pI11CHttpParserEE
0000000000017100 r _ZZNK5boost10shared_ptrI11CHttpParserEptEvE19__PRETTY_FUNCTION__

?

?

命令輸出結果顯示,那些報錯的函數的符號 同樣可以在nm里找到。

不同的是,這四個出錯的函數,輸出的前半部分為空。

這就是異常和問題所在!

?

下面我們只要對nm命令稍作了解:

nm命令還是比較簡單而且強大的。它用來列出一個目標文件中的各種符號。符號的種類很多,以下是一些常見的符號類型

nm輸出字符 含義
R Read only symbol. 比如在代碼中有一個const MAXDATA = 3095; 則MAXDATA就是一個Read only symbol
N 這是一個調試符號
D 這是一個已經初始化的變量的符號。比如代碼中int i = 1和char *str = "Hello"則i和str都是這種類型的符號
T Text段的符號。子程序都是這種符號,比如文件中實現了一個函數function,則function就是這種符號
U 未定義的符號。如果文件中引用了不存在的函數,則這些未定義的函數符號就是這種類型
S 未初始化的符號,比如全局變量int s;則s的符號就是此類型
nm命令的詳細用法以及例子見正文。

?

至此,我們可以推斷:動態庫中有未定義的符號,說明該動態庫的編譯有問題,即是如下原因之一:

(1)一是使用者自己定義的函數或者全局變量所在源代碼文件,沒有被編譯、連接。

(2)一是使用者自己定義的函數或者全局變量沒有定義。

這種問題的解決,首先就要檢查動態庫的makefile寫的是否有問題。

果然,發現makefile里沒有把該出錯函數所在的定義的源文件沒有編譯進去。

?

?

三?問題解決

???? 找到了原因,問題解決就方便了。修改.so的makefile即可。

svn diff

-COM_SRCS := $(GENASRCDIR)/CGenaEngine.cpp
+COM_SRCS := $(GENASRCDIR)/CGenaEngine.cpp?? $(HTTPSRCDIR)/CHttpMiniParser.cpp?? -----》把CHttpMiniParser.cpp??編譯進去。


?

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久夜| 亚洲欧美国产不卡| 美女视频黄a大片欧美| 久久国产日韩| 亚洲丰满少妇videoshd| 亚洲高清在线视频| 欧美精品99| 午夜国产精品影院在线观看| 亚洲综合国产激情另类一区| 国产真实乱子伦精品视频| 麻豆精品视频在线观看| 欧美区高清在线| 香蕉成人啪国产精品视频综合网| 欧美亚洲一区二区在线| 亚洲国产精品激情在线观看| 亚洲欧洲精品一区二区三区| 欧美婷婷久久| 久久婷婷综合激情| 欧美日本网站| 久久久精品五月天| 欧美激情一二区| 欧美怡红院视频| 欧美高清在线一区二区| 欧美一区二区在线看| 久久国产精品一区二区三区| 一区二区三区福利| 亚洲无线观看| 久久女同互慰一区二区三区| 亚洲无线视频| 浪潮色综合久久天堂| 亚洲综合精品自拍| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产一二三精品| 亚洲国产导航| 国产在线观看精品一区二区三区| 亚洲日本欧美日韩高观看| 国产一区二区三区视频在线观看| 亚洲人人精品| 亚洲电影av| 欧美不卡激情三级在线观看| 欧美性猛交视频| 亚洲国产成人精品视频 | 久久青青草综合| 午夜精品在线视频| 欧美屁股在线| 在线精品一区| 欧美成人小视频| 欧美一级久久久久久久大片| 99国产精品久久久久久久久久 | 亚洲国产精品电影| 国产日韩欧美91| av不卡在线看| 欧美日韩在线第一页| 蜜桃av综合| 国产综合久久| 欧美一区二区国产| 久久9热精品视频| 国产精品免费视频xxxx| 亚洲精品自在久久| 亚洲最新在线| 欧美人与性动交α欧美精品济南到| 麻豆成人小视频| 狠狠久久综合婷婷不卡| 久久国产精品久久久久久| 久久久久国产一区二区三区| 国产日韩精品一区二区三区| 亚洲专区一二三| 欧美一级专区| 韩曰欧美视频免费观看| 久久激情视频免费观看| 久久综合网络一区二区| 精品999日本| 中文av一区特黄| 亚洲一区二区四区| 国产精品久久久一区二区三区| 亚洲在线观看免费视频| 欧美在线亚洲在线| 国产一区再线| 久久视频免费观看| 亚洲国产欧洲综合997久久| 亚洲精品美女在线| 国产精品成人一区二区三区夜夜夜 | 亚洲一区中文| 国产在线精品一区二区夜色| 久久久久久久999精品视频| 欧美成人蜜桃| 一区二区三区偷拍| 国产曰批免费观看久久久| 免费亚洲电影在线| 亚洲视频在线一区| 蜜臀久久久99精品久久久久久| 亚洲伦理自拍| 国产精品自拍在线| 久久一区二区三区国产精品| 亚洲国产女人aaa毛片在线| 亚洲一级网站| 在线观看亚洲一区| 欧美日韩中文在线| 久久精品一区二区三区四区| 亚洲精品久久久久久久久久久久 | 亚洲激情综合| 午夜精品在线看| 亚洲人在线视频| 国产欧美日韩精品丝袜高跟鞋| 久久野战av| 亚洲综合视频网| 亚洲精品久久久久久一区二区| 国产精品第一页第二页第三页| 久久国产毛片| 正在播放欧美一区| 欧美华人在线视频| 久久se精品一区精品二区| 亚洲精品一区二区网址| 国产一区二区欧美日韩| 欧美日韩无遮挡| 老牛嫩草一区二区三区日本| 一区二区三区精品国产| 欧美激情视频在线播放| 久久国产主播| 亚洲一二三区精品| 亚洲国产专区| 激情伊人五月天久久综合| 国产精品欧美精品| 欧美日韩精品欧美日韩精品| 久久婷婷国产综合国色天香| 亚洲一区精彩视频| 日韩午夜精品| 亚洲精品视频二区| 欧美1区免费| 久久久久久夜| 久久久91精品国产一区二区精品| 亚洲一区三区电影在线观看| 亚洲视频欧美在线| 一区二区三区欧美视频| 亚洲乱码国产乱码精品精| 亚洲成色www久久网站| 国内精品视频在线播放| 国产一区成人| 国产亚洲电影| 国产一区二区三区视频在线观看 | 一区二区视频免费在线观看| 国产视频在线观看一区二区三区| 国产精品美女www爽爽爽视频| 欧美日韩一区二区在线观看| 欧美日韩色一区| 欧美三级黄美女| 国产精品毛片| 国产乱子伦一区二区三区国色天香 | 久久野战av| 欧美gay视频激情| 蘑菇福利视频一区播放| 奶水喷射视频一区| 欧美黄色aaaa| 欧美三级乱人伦电影| 国产精品成人aaaaa网站| 国产精品男女猛烈高潮激情| 国产精品亚洲不卡a| 国产亚洲一本大道中文在线| 亚洲成人资源| 亚洲免费观看| 欧美一区91| 免费成人你懂的| 亚洲精品在线免费| 亚洲一区中文字幕在线观看| 欧美中日韩免费视频| 久久亚裔精品欧美| 欧美日韩免费一区| 国产日韩亚洲欧美综合| 亚洲成人在线视频网站| 中文久久精品| 麻豆成人精品| av成人免费在线| 久久国产日韩| 国产精品第十页| 亚洲第一区中文99精品| 亚洲一区二区在线| 另类天堂av| 亚洲最新色图| 久久久www| 欧美视频一区二区三区在线观看 | 免费日韩视频| 国产精品理论片| 亚洲国产精品综合| 性8sex亚洲区入口| 亚洲大胆av| 免费中文日韩| 在线亚洲国产精品网站| 久久久女女女女999久久| 欧美性猛片xxxx免费看久爱| 在线免费一区三区| 欧美一区二区黄| 亚洲欧洲一区二区在线播放| 午夜亚洲性色视频| 欧美三级网址| 亚洲韩国日本中文字幕| 久久久亚洲影院你懂的| 亚洲综合三区| 欧美日韩一区二区三| 91久久线看在观草草青青| 久久久久久国产精品mv|