Thrift官方安裝手冊(譯)

本篇是Thrift官網安裝文檔的翻譯,原地址點擊這裏。Thrift以前是不支持Windows的。但是彷佛0.9版本號之後已經支持Window了。介紹了Thrift安裝的環境要求以及在centos,Debian/Ubuntu,OS X和Windows下的安裝過程。並提出了一些安裝過程當中可能遇到的問題和解決的方法。適用於thrift0.9版本號。php

1 Thrift的環境要求

Apache的Thrift的編譯器爲支持可移植由C++語言編寫而成。但在安裝到某些系統中時要求有必定的環境要求。在如下的指南中選擇你要安裝的系統開始吧。html

  • Centos 6.5 Install
  • Debian/Ubuntu install
  • OS X Install
  • Windows Install

1.1 基本環境要求

  • 一個相對posix兼容* NIX系統
  • Windows下可用的Cywin或者MinGW
  • g++ 4.2
  • boost 1.53.0
  • 生成編譯器時還需要支持lex和yacc的執行時庫

1.2 編譯源代碼的環境要求

  • GNU的編譯工具:
    • autoconf 2.65
    • automake 1.9
    • libtool 1.5.24
  • pkg-config autoconf macros (pkg.m4)
  • lex and yacc (開發主要使用flex和bison)
  • libssl-dev

1.3 語言要求

僅僅選擇編譯你需要的語言的庫就可以了java

  • C++
    • Boost 1.53.0
    • libevent (可選,編譯無堵塞server時使用)
    • 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

2 Centos 6.5 下安裝Thrift

進行Thrift的最小化安裝,在Centos 6.5 上如下的步驟不可缺乏. 咱們給出使用當前開發的主分支來從源碼編譯Thrift的樣例。這些介紹對Thrift0.9.2 的 releases版本號相同有效。python

更新系統

sudo yum -y update

安裝平臺開發工具

sudo yum -y groupinstall "Development Tools"

升級autoconf/automake/bison

sudo yum install -y wget

升級 autoconf

wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr
make
sudo make install
cd ..

升級 automake

wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar xvf automake-1.14.tar.gz
cd automake-1.14
./configure --prefix=/usr
make
sudo make install
cd ..

升級 bison

wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
tar xvf bison-2.5.1.tar.gz
cd bison-2.5.1
./configure --prefix=/usr
make
sudo make install
cd ..

加入加入可選的c++語言庫依賴庫

所有語言都要用到Apache的Thrift 的IDL編譯器,從這點看IDL編譯器需要的一切都要安裝。 (怎樣你僅僅需要安裝編譯器可跳過此節).c++

假設你要使用C++開發Thrift的client/server,你還需要編譯支持C++共享庫的可選包。git

安裝C++依賴庫

sudo yum -y install libevent-devel zlib-devel openssl-devel

升級 Boost

wget http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz
tar xvf boost_1_55_0.tar.gz
cd boost_1_55_0
./bootstrap.sh
sudo ./b2 install

編譯Thrift的IDL編譯器

git clone https://git-wip-us.apache.org/repos/asf/thrift.git
cd thrift
./bootstrap.sh
./configure --with-lua=no
make
sudo make install

上述步驟將構建編譯器(thrift/compiler/cpp/thrift --version)以及隨意語言庫的支持。當使用make來安裝時的路徑爲:/usr/local/bin/thrift.你可以使用./configure --enable-libs=no 切換來編譯IDL編譯器,而不編譯語言庫。使用make check可以執行測試用例.web


3 Debian/Ubuntu 下安裝Thrift

在基於Linux的Debian/Ubuntu等系統下安裝Thrift需要安裝如下要求的工具和庫。apache

sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libboost-system-dev libboost-filesystem-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev

接下來可以安裝Java的JDK.輸入java查看可用的包列表,選擇並安裝並使用apt-get安裝。bootstrap

Debian穩定的用戶需要手動安裝近期automake版本號:windows

wget http://ftp.debian.org/debian/pool/main/a/automake-1.14/automake_1.14.1-3_all.deb
sudo dpkg -i automake_1.14.1-3_all.deb

可選包

其它包取決於你但願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


4 OS X 下安裝Thrift

在基與OS X的系統下安裝Thrift需要安裝如下要求的工具和庫。

安裝Boost

從boost.org上下載boost庫並解壓,編譯

./bootstrap.sh
sudo ./b2 threading=multi address-model=64 variant=release stage install

安裝libevent

下載libevent並解壓,編譯

./configure --prefix=/usr/local 
make
sudo make install

安裝 Apache Thrift

下載Apache Thrift 最新版本號並解壓,編譯

./configure --prefix=/usr/local/ --with-boost=/usr/local --with-libevent=/usr/local


5 Windows下安裝Thrift

咱們已經語言生成了一個windows下的thrift編譯器,點擊這裏下載

5.1 Windows下源代碼安裝

win32的基本要求

Thrift的編譯器爲支持可移植,使用C++語言編寫,但是仍有一些環境要求:

  • Cygwin or MinGW
  • Apache Thrift 環境要求(參看第一節)

Thrift的執行庫由多種語言寫成,這些語言有不一樣的語言接口。

源代碼安裝

假設是第一次編譯源代碼,需要生成configure腳本。(所以無需全量下載安裝包)。進入安裝包的根文件夾,執行

./bootstrap.sh

一旦configure腳本生成,Thrift就可以編譯了。執行

export CXXFLAGS="-D PTHREAD_MUTEX_RECURSIVE_NP=PTHREAD_MUTEX_RECURSIVE"
./configure

由於編譯報錯PTHREAD_MUTEX_RECURSIVE_NP沒有定義,需要環境變量設置CXXFLAGS,用PTHREAD_MUTEX_RECURSIVE替換PTHREAD_MUTEX_RECURSIVE_NP。(在cygwin 20100320, Thrift r760184, 最新的 pthread上測試經過。)

可選部分: 由於下面錯誤你可以不用在根文件夾編譯Thrift的編譯器。在make前跳轉到編譯器的文件夾

cd compiler/cpp

現在可用make來生成編譯器了(假設在根文件夾make的話還會生成執行時庫)

make
make install

一些語言包必須使用構建工具手動安裝(在撰寫本文時,適用於Java,Ruby,PHP).

每種語言的庫的具體安裝步驟可以閱讀lib/<language>/文件夾下READMI文件。

Cygwin安裝時的可能可選的問題

另見MinGW安裝時的可能可選的問題.

語言錯誤(Syntax error in ./configure)

執行./configure可能出現下面錯誤:

./configure: line 21183: syntax error near unexpected token `MONO,' ./configure: line 21183: `  PKG_CHECK_MODULES(MONO, mono >= 1.2.6, have_mono=yes, have_mono=no)'

要解決問題,需要找到系統中的pkg.m4 (由pkg-config 安裝包安裝)文件並複製的thrift/aclocal文件夾下。在Thrift的根文件夾時可以執行如下的命令

cp /usr/share/aclocal/pkg.m4 aclocal

最後,在執行./bootstrap.sh./configure。 (注意,pkg.m4由pkg-config 工具生成.假設你的文件夾/usr/share/aclocal下沒有pkg.m4文件,說明你可能沒有安裝pkg-config.)

安裝perl的執行時庫

安裝Perl庫附帶chmod的時候可能會出現錯誤。一個解決方法是假設不需要它們話安裝perl庫時避免安裝它們。

假設你不需要Perl,可以執行configure時增長選項 --without-perl.

假設你需要Perl,你最好在安裝完Thrift後,用如下的內容替換thrift/lib/perl/Makefile的內容後手動安裝。

TODO

安裝C++執行庫時的鏈接

使用g++連接已安裝的libthrift.a時可能會出現錯誤,Thrift 類找不到虛函數表(vtables)和異常(exceptions).
解決方法是將丟失的類直接連接到編譯後的目標文件。在MakeFile可以使用如下語句實現

THRIFT_O=<path to>/thrift/lib/cpp
LTHRIFT=$(THRIFT_O)/Thrift.o $(THRIFT_O)/TSocket.o $(THRIFT_O)/TBinaryProtocol.o $(THRIFT_O)/TBufferTransports.o

而後使用$(LTHRIFT) 而不是-lthrift連接。

TODO - diagnose issue further

使用 cygwin 1.7.5-1, g++-4.3.4, fork() and throw 時出現C++執行時段錯誤

當你是g++-3編譯器編譯你的Thrift 的C++程序時,fork() 以後可能出現段錯誤。
這個問題在 Cygwin的郵件列表已經有描寫敘述 http://cygwin.com/ml/cygwin/2010-05/msg00203.html.

這個問題在 Cygwin 1.7.5-1以後的版本號或者g++ 4.5.0以後已經修復.

5.2 源代碼安裝 (不依賴Cygwin)

安裝MinGW (www.mingw.org)後,編譯Thrift的編譯器和執行時庫(未測試)再也不需要依賴cygwin.dll。你僅僅需要依照如下的步驟進行就能夠。
加入Windows環境變量PATH

C:\MINGW\BIN

接着,打開文件compiler/cpp/Makefile.am,加入如下一行內容到thrift_CXXFLAGS:

-DMINGW -mno-cygwin -lfl

執行腳本 bootstrap.sh:

./bootstrap.sh

確保環境變量$PATH中包括java,假設沒有的話,可以執行

export PATH=$PATH:"/cygdrive/c/program files/java/jre1.6.0_05/bin"

執行configure,使用CXXFLAGS解決舊線程的定義問題

export CXXFLAGS="-D PTHREAD_MUTEX_RECURSIVE_NP=PTHREAD_MUTEX_RECURSIVE"
./configure

可選:假設僅僅生成編譯器的話,可以調整到編譯器所在文件夾

cd compiler/cpp

執行 make:

mingw32-make.exe

使用MinGW安裝可能出現的問題

另見 使用Cygwin安裝可能出現的問題,包含關於 PTHREAD_MUTEX_RECURSIVE_NP的描寫敘述。

yywrap 未找到

保證在Makefile的cxxflags加入-lfl,或者嘗試加入-Lc:/cygwin/libs

boost 未找到

嘗試改變頭文件的路徑,編輯compiler/cpp/Makefile,查找BOOST_CPPFLAGS, 改動爲

BOOST_CPPFLAGS = -Ic:/cygwin/usr/include/boost-1_33_1

realpath 未找到

在Makefile中給CXXDEFS變量加入-DMINGW -mno-cygwin

THrift源碼組織

最後看看Thrift的源碼組織結構

--/thrift
----/compiler #編譯器源代碼
----/doc #文件
----/lib #框架庫源代碼
----/test #測試用例文件夾
----/tutorial #演示樣例指南文件夾
相關文章
相關標籤/搜索