http://thrift.apache.org/docs/install/
一:安裝最新版(自動安裝)
最簡單的是用homebrew進行安裝
-
安裝homebrew 在終端輸入ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
- 安裝thrift brew install thrift
用brew安裝的thrift版本是0.9的,but,我們項目中得thrift版本是0.8的,所以果斷卸載掉。
brew uninstall thrift。轉到下面第二種方法安裝thrift
二:手動安裝0.8.0
先安裝依賴。
http://www.jattcode.com/installing-autoconf-automake-libtool-on-mac-osx-mountain-lion/
- 安裝BOOST
命令:./bootstrap.sh,該命令用於生成bjam可執行文件,這個東西就是用來編譯boost庫
命令:sudo ./b2 threading=multi address-model=64 variant=release stage install
-
安裝 libevent
命令:./configure --prefix=/usr/local
命令:make
命令:sudo make install
安裝 Apache Thrift
編譯命令:./configure --prefix=/usr/local/ --with-boost=/usr/local/lib --with-libevent=/usr/local/lib --without-ruby --without-python --without-perl --without-php
有一些不相關的code genorater可以不要了,不然又得會報錯。。。
安裝命令:sudo make install
thrift -version 可以查看安裝是否成功和版本
安裝8的時候會遇到如下問題,並按如下解決:
Osx 10.9 是比較新的系統, 從這個版本開始, 系統默認編譯器從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)
故需顯式指定名字空間.