本篇是Thrift官网安装文档的翻译,原地址点击这里。Thrift以前是不支持Windows的。但是彷佛0.9版本号之后已经支持Window了。介绍了Thrift安装的环境要求以及在centos,Debian/Ubuntu,OS X和Windows下的安装过程。并提出了一些安装过程当中可能遇到的问题和解决的方法。适用于thrift0.9版本号。php
Apache的Thrift的编译器为支持可移植由C++语言编写而成。但在安装到某些系统中时要求有必定的环境要求。在如下的指南中选择你要安装的系统開始吧。html
仅仅选择编译你需要的语言的库就可以了java
进行Thrift的最小化安装,在Centos 6.5 上如下的步骤不可缺乏. 咱们给出使用当前开发的主分支来从源码编译Thrift的样例。这些介绍对Thrift0.9.2 的 releases版本号相同有效。python
sudo yum -y update
sudo yum -y groupinstall "Development Tools"
sudo yum install -y wget
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 ..
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 ..
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 ..
所有语言都要用到Apache的Thrift 的IDL编译器,从这点看IDL编译器需要的一切都要安装。 (怎样你仅仅需要安装编译器可跳过此节).c++
假设你要使用C++开发Thrift的client/server,你还需要编译支持C++共享库的可选包。git
sudo yum -y install libevent-devel zlib-devel openssl-devel
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
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
在基于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支持什么语言.
在基与OS X的系统下安装Thrift需要安装如下要求的工具和库。
从boost.org上下载boost库并解压,编译
./bootstrap.sh
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 --with-libevent=/usr/local
咱们已经语言生成了一个windows下的thrift编译器,点击这里下载
Thrift的编译器为支持可移植,使用C++语言编写,但是仍有一些环境要求:
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文件。
另见MinGW安装时的可能可选的问题.
执行./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库附带chmod的时候可能会出现错误。一个解决方法是假设不需要它们话安装perl库时避免安装它们。
假设你不需要Perl,可以执行configure
时增长选项 --without-perl.
假设你需要Perl,你最好在安装完Thrift后,用如下的内容替换thrift/lib/perl/Makefile
的内容后手动安装。
TODO
使用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
当你是g++-3编译器编译你的Thrift 的C++程序时,fork() 以后可能出现段错误。
这个问题在 Cygwin的邮件列表已经有描写叙述 http://cygwin.com/ml/cygwin/2010-05/msg00203.html.
这个问题在 Cygwin 1.7.5-1以后的版本号或者g++ 4.5.0以后已经修复.
安装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
另见 使用Cygwin安装可能出现的问题,包含关于 PTHREAD_MUTEX_RECURSIVE_NP的描写叙述。
保证在Makefile的cxxflags加入-lfl,或者尝试加入-Lc:/cygwin/libs
尝试改变头文件的路径,编辑compiler/cpp/Makefile
,查找BOOST_CPPFLAGS
, 改动为
BOOST_CPPFLAGS = -Ic:/cygwin/usr/include/boost-1_33_1
在Makefile中给CXXDEFS变量加入-DMINGW -mno-cygwin
最后看看Thrift的源码组织结构
--/thrift ----/compiler #编译器源代码 ----/doc #文件 ----/lib #框架库源代码 ----/test #測试用例文件夹 ----/tutorial #演示样例指南文件夹