thrift使用過程中的問題

我就是曹總發表於2019-05-11

    1、安裝過程無需./bootstrap這個過程,本來就沒有這個檔案

    2、Apache要求安裝之後認證,可以在svn上面下一個KYES完成認證過程;

二、thrift安裝完成之後,可以通過一個例項來熟悉他的使用過程。要感謝xiaoshe朋友的部落格http://blog.csdn.net/hbuxiaoshe/article/details/6558391,給我提供了一個完整的學習樣例。該部落格中寫的非常清晰。
有幾個需要注意的問題:
thrift本身是一個開源的軟體,它一直處於開發過程中,難免出現一些bug,下面是我遇到的幾個bug;
第一: 在執行編譯thrift生成的伺服器端程式時,出現
error: ‘uint8_t’ does not name a type
error: ‘uint32_t’ does not name a type
這個問題一開始的確讓我很迷茫,難道使用thrift生成程式碼的同時,還需要手動新增各種標頭檔案嗎,這個問題看起來很簡單,只要手工在各個相關檔案中加入stdint.h標頭檔案就可以,不過這個要求很匪夷所思。
後來在網上查詢,找到了這個問題的解決方法,在TProtocol.h中有這樣的語句:#ifdef HAVE_NETINET_IN_H的預處理命令,而且後面就是我們想要的標頭檔案。
因此在g++之後,加上引數 -DHAVE_NETINET_IN_H實現變數宣告,就可以解決這個問題。我的理解是現在thrift存在的一個問題,或者直接修改TProtocol.h不過,我不建議這樣做。
第二: undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const'
這也是存在的一個原始碼的bug,在protocol/TBinaryProtocol.h中,有兩條語句
static const int32_t
這時,想到前面出現的問題,只要改成 static const uint32_t,問題就解決了
三、還有一點需要注意的就是,在一個編譯命令中,遇到來一個非常奇怪的問題,一直沒有找到合適的解決方法,後來發現把-lthrift放在給g++的最後就可以解決了,後來理解到原因可能是後面還有內容需要依賴於thrift庫,而把他放在前面,後面對庫的依賴就找不到來。。
可以看出g++後面引數的順序和位置對程式的編譯和執行的影響還是挺大的。

龐順龍最後編輯於:3年前

內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。

相關文章