[心得]Mac下編譯thrift踩坑總結
阿新 • • 發佈:2019-02-16
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檔案。