apache的thrift的編譯器為支援可移植由c++語言編寫而成。但在安裝到某些系統中時要求有一定的環境要求。在下面的指南中選擇你要安裝的系統開始吧。
centos 6.5 install
debian/ubuntu install
os x install
windows install
一個相對posix相容* nix系統
windows下可用的cywin或者mingw
g++ 4.2
boost 1.53.0
生成編譯器時還需要支援lex和yacc的運作時庫
gnu的編譯工具:
autoconf 2.65
automake 1.9
libtool 1.5.24
pkg-config autoconf macros (pkg.m4)
lex and yacc (開發主要使用flex和bison)
libssl-dev
隻選擇編譯你需要的語言的庫就可以了
c++
libevent (可選,編譯無阻塞伺服器時使用)
zlib (可選)
java
java 1.7
apache ant
c#: mono 1.2.4 (可使用 pkg-config 檢測) or visual studio 2005+
python 2.6 (包括擴充子產品的頭檔案)
php 5.0 (包括擴充子產品的頭檔案)
ruby 1.8
bundler gem
erlang r12 (可以使用r11,但是不推薦)
perl 5
bit::vector
class::accessor
進行thrift的最小化安裝,在centos 6.5 上下面的步驟必不可少. 我們給出使用目前開發的主分支來從源代碼編譯thrift的例子。這些介紹對thrift0.9.2 的 releases版本同樣有效。
所有語言都要用到apache的thrift 的idl編譯器,從這點看idl編譯器需要的一切都要安裝。 (如何你隻需要安裝編譯器可跳過此節).
如果你要使用c++開發thrift的用戶端/伺服器,你還需要編譯支援c++共享庫的可選包。
上述步驟将建構編譯器(thrift/compiler/cpp/thrift --version)以及任意語言庫的支援。當使用<code>make</code>來安裝時的路徑為:<code>/usr/local/bin/thrift</code>.你可以使用<code>./configure --enable-libs=no</code> 切換來編譯idl編譯器,而不編譯語言庫。使用<code>make check</code>可以運作測試用例.
在基于linux的debian/ubuntu等系統下安裝thrift需要安裝下面要求的工具和庫。
接下來可以安裝java的jdk.輸入java檢視可用的包清單,選擇并安裝并使用apt-get安裝。
debian穩定的使用者需要手動安裝最近automake版本:
其他包取決于你希望thrift支援什麼語言.
ruby
ruby-full ruby-dev ruby-rspec rake rubygems libdaemons-ruby libgemplugin-ruby mongrel
python
python-all python-all-dev python-all-dbg
perl
libbit-vector-perl libclass-accessor-class-perl
php, install
php5-dev php5-cli phpunit
c_glib
libglib2.0-dev
erlang
erlang-base erlang-eunit erlang-dev
csharp
mono-gmcs mono-devel libmono-system-web2.0-cil nunit nunit-console
haskell
ghc6 cabal-install libghc6-binary-dev libghc6-network-dev libghc6-http-dev
thrift compiler for windows
mingw32 mingw32-binutils mingw32-runtime nsis
在基與os x的系統下安裝thrift需要安裝下面要求的工具和庫。
從boost.org上下載下傳boost庫并解壓,編譯
下載下傳libevent并解壓,編譯
下載下傳apache thrift 最新版本并解壓,編譯
thrift的編譯器為支援可移植,使用c++語言編寫,但是仍有一些環境要求:
cygwin or mingw
apache thrift 環境要求(參看第一節)
thrift的運作庫由多種語言寫成,這些語言有不同的語言接口。
如果是第一次編譯源碼,需要生成configure腳本。(是以無需全量下載下傳安裝包)。進入安裝包的根目錄,運作
一旦configure腳本生成,thrift就可以編譯了。運作
由于編譯報錯pthread_mutex_recursive_np未定義,需要設定環境變量cxxflags,用pthread_mutex_recursive替換pthread_mutex_recursive_np。(在cygwin 20100320, thrift r760184, 最新的 pthread上測試通過。)
可選部分: 由于以下錯誤你可以不用在根目錄編譯thrift的編譯器。在make前跳轉到編譯器的目錄
現在可用make來生成編譯器了(如果在根目錄make的話還會生成運作時庫)
一些語言包必須使用建構工具手動安裝(在撰寫本文時,适用于java,ruby,php).
每種語言的庫的詳細安裝步驟可以閱讀<code>lib/<language>/</code>目錄下readmi檔案。
另見mingw安裝時的可能可選的問題.
運作<code>./configure</code>可能出現以下錯誤:
要解決這個問題,需要找到系統中的pkg.m4 (由pkg-config 安裝包安裝)檔案并複制的<code>thrift/aclocal</code>目錄下。在thrift的根目錄時可以運作下面的指令
最後,在運作<code>./bootstrap.sh</code> 和<code>./configure</code>。
(注意,pkg.m4由pkg-config 工具生成.如果你的目錄<code>/usr/share/aclocal</code>下沒有pkg.m4檔案,說明你可能沒有安裝pkg-config.)
安裝perl庫附帶chmod的時候可能會出現錯誤。一個解決方法是如果不需要它們話安裝perl庫時避免安裝它們。
如果你不需要perl,可以運作<code>configure</code>時加入選項 --without-perl.
如果你需要perl,你最好在安裝完thrift後,用下面的内容替換<code>thrift/lib/perl/makefile</code>的内容後手動安裝。
使用g++連結已安裝的libthrift.a時可能會出現錯誤,thrift 類找不到虛函數表(vtables)和異常(exceptions).
解決方法是将丢失的類直接連結到編譯後的目标檔案。在makefile可以使用下面語句實作
然後使用$(lthrift) 而不是-lthrift連結。
當你是g++-3編譯器編譯你的thrift 的c++程式時,fork() 之後可能出現段錯誤。
這個問題在 cygwin 1.7.5-1之後的版本或者g++ 4.5.0之後已經修複.
安裝mingw (www.mingw.org)後,編譯thrift的編譯器和運作時庫(未測試)不再需要依賴cygwin.dll。你隻需要按照下面的步驟進行即可。
添加windows環境變量path
接着,打開檔案<code>compiler/cpp/makefile.am</code>,添加下面一行内容到<code>thrift_cxxflags</code>:
運作腳本 <code>bootstrap.sh</code>:
確定環境變量<code>$path</code>中包含java,如果沒有的話,可以運作
運作<code>configure</code>,使用cxxflags解決舊線程的定義問題
可選:如果隻生成編譯器的話,可以調整到編譯器所在目錄
運作 make:
另見 使用cygwin安裝可能出現的問題,包括關于 pthread_mutex_recursive_np的描述。
保證在makefile的cxxflags添加-lfl,或者嘗試添加-lc:/cygwin/libs
嘗試改變頭檔案的路徑,編輯<code>compiler/cpp/makefile</code>,查找<code>boost_cppflags</code>,
修改為
在makefile中給cxxdefs變量添加<code>-dmingw -mno-cygwin</code>
最後看看thrift的源代碼組織結構