1. 程式人生 > >[心得]Mac下編譯thrift踩坑總結

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

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檔案。