thrift使用過程中的問題

1. thrift的安裝,不容小視,他需要依賴很多的庫和工具,尤其是boost等工具都需要源碼安裝,所以嚴格按照官網上的信息,一步一步執行就可以來。

    http://thrift.apache.org/download/

    有兩個問題需要注意: 1. 安裝過程無需./bootstrap這個過程,本來就沒有這個文件

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


2. 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,問題就解決了

3. 還有一點需要注意的就是,在一個編譯命令中,遇到來一個非常奇怪的問題,一直沒有找到合適的解決方法,後來發現把-lthrift放在給g++的最後就可以解決了,後來理解到原因可能是後面還有內容需要依賴於thrift庫,而把他放在前面,後面對庫的依賴就找不到來。。

   可以看出g++後面參數的順序和位置對程序的編譯和執行的影響還是挺大的。


官方的使用教程和事例

http://wiki.apache.org/thrift/ThriftUsageC%2B%2B

        



 
發佈了10 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章