天天看点

Thrift官方安装手册(译) 1 Thrift的环境要求 2 Centos 6.5 下安装Thrift 3 Debian/Ubuntu 下安装Thrift 4 OS X 下安装Thrift 5 Windows下安装Thrift THrift源代码组织

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/&lt;language&gt;/</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的源代码组织结构