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的源代码组织结构