[心得]Mac下編譯thrift踩坑總結

tangchen2016發表於2016-11-17
thrift 0.8.0

安裝8的時候會遇到如下問題,並按如下解決:

Osx 10.10 是比較新的系統, 從這個版本開始, 系統預設編譯器從GCC 改為 Clang(gcc -v 一下, 給的是clang 的提示). 

Thrift 0.8  程式碼相對又比較老, 在新的編譯器上遇到了下列一些問題.

問題1 :多個原始碼檔案報錯 # include <tr1/functional>, file not found, 改為 # include <boost/tr1/functional.hpp> 解決.

需要修改以下檔案:

lib/cpp/src/concurrency/ThreadManager.h  line:24
lib/cpp/src/async/TAsyncChannel.h line:23
lib/cpp/src/async/TAsyncChannel.cpp line:21
lib/cpp/src/async/TAsyncProcessor.h line:23
lib/cpp/src/async/TAsyncBufferProcessor.h line:23
 原因:  在我試驗的環境下, 此標頭檔案有字尾名/usr/local/include/boost/ tr1/functional.hpp

問題2: cpp 測試程式碼 test/Benchmark.cpp 編譯失敗,  shared_ptr  ambigous , 用 boost::shared_ptr 替換 shared_ptr,

錯誤消失.

原因: Clang 支援 C++ 11, 其 標準庫自帶 shared_ptr(std::shared_ptr, 參考 http://zh.cppreference.com/w/cpp/memory/shared_ptr) 

故需顯式指定名字空間.

 三:測試

下面編寫一個HelloWorld.thrift 來測試一下,內容如下:

namespace java com.xx.mobile.hotel.sc.demo

service HelloWorldService {
     string sayHello(1:string username)
}

執行:thrift -gen java HelloWorld.thrift 將在同級目錄下生成gen-java/com/xx/mobile/hotel/sc/demo/HelloWorldService.java檔案。

相關文章