Thrift官方安装手冊(译)
本篇是Thrift官网安装文档的翻译,原地址点击这里。Thrift之前是不支持Windows的。可是似乎0.9版本号以后已经支持Window了。介绍了Thrift安装的环境要求以及在centos,Debian/Ubuntu,OS X和Windows下的安装过程。并提出了一些安装过程中可能遇到的问题和解决的方法。适用于thrift0.9版本号。
1 Thrift的环境要求
Apache的Thrift的编译器为支持可移植由C++语言编写而成。但在安装到某些系统中时要求有一定的环境要求。在以下的指南中选择你要安装的系统開始吧。
- 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 语言要求
仅仅选择编译你须要的语言的库就能够了
- 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版本号相同有效。
更新系统
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++开发Thrift的client/server,你还须要编译支持C++共享库的可选包。
安装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
切换来编译IDL编译器,而不编译语言库。使用
--enable-libs=nomake check
能够执行測试用例.
3 Debian/Ubuntu 下安装Thrift
在基于Linux的Debian/Ubuntu等系统下安装Thrift须要安装以下要求的工具和库。
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安装。
Debian稳定的用户须要手动安装近期automake版本号:
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 #演示样例指南文件夹
Thrift官方安装手冊(译)的更多相关文章
- Thrift官方安装手册(译)
本篇是Thrift官网安装文档的翻译,原地址点击这里.Thrift之前是不支持Windows的.但是似乎0.9版本以后已经支持Window了.介绍了Thrift安装的环境要求以及在centos,Deb ...
- Oracle 12C 在 Oracle Linux 6.5 64Bit 安装手冊
Oracle 12C 在 Oracle Linux 6.5 64Bit 安装手冊.step by step 下载地址: http://download.csdn.net/detail/rlhua/7 ...
- Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安装手冊(一抹曦阳)
Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安装手冊(一抹曦阳).pdf下载地址 ,step by step http://download.csdn ...
- Hadoop-2.4.0分布式安装手冊
文件夹 文件夹 1 1. 前言 2 2. 部署 2 2.1. 机器列表 2 2.2. 主机名 2 2.2.1. 暂时改动主机名 3 2.2.2. 永久改动主机名 3 2.3. 免password登录范 ...
- Nginx安装手冊以及图片server部署
1. 安装gcc yum install gcc 2. 安装pcre,pcre-devel 在zhoulh文件夹下建立source build文件夹 mkdir source bu ...
- Nginx中文手冊
下载 : Nginx 中文手冊 Nginx 常见应用技术指南[Nginx Tips] 第二版 作者:NetSeek http://www.linuxtone.org (IT运维专家网|集群架构|性能调 ...
- 6. GC 调优(工具篇) - GC參考手冊
进行GC性能调优时, 须要明白了解, 当前的GC行为对系统和用户有多大的影响. 有多种监控GC的工具和方法, 本章将逐一介绍经常使用的工具. 您应该已经阅读了前面的章节: 垃圾收集简单介绍 - GC參 ...
- 阿里Java开发手冊之编程规约
对于程序猿来说,编程规范能够养成良好的编程习惯,提高代码质量,减少沟通成本.就在2月9号,阿里出了一份Java开发手冊(正式版),分为编程规约.异常日志.MySQL规约,project规约.安全规约五 ...
- Loopback測试软件AX1用户手冊 V3.1
点击:AX1 软件下载 1. 什么是AX1 AX1程序是基于windows的PC程序,用来评估 iinChip™的性能,也即是wiznet的硬件TCP/IP芯片. AX1通过网络与iinChip™评估 ...
随机推荐
- poj 2001 Shortest Prefixes(特里)
主题链接:http://poj.org/problem?id=2001 Description A prefix of a string is a substring starting at the ...
- ios新开发语言swift 新手教程
http://gashero.iteye.com/blog/2075324 视频教程:http://edu.51cto.com/lesson/id-26464.html
- fzu 2150 Fire Game 【身手BFS】
称号:fzupid=2150"> 2150 Fire Game :给出一个m*n的图,'#'表示草坪,' . '表示空地,然后能够选择在随意的两个草坪格子点火.火每 1 s会向周围四个 ...
- 颜色(color)转换为三刺激值(r/g/b)(干股)
//颜色转换 ##665522 - 三色值 + (UIColor *)setFontColorWithString:(NSString *)color { NSString *cString ...
- nsis 固定到任务栏
nsis 固定到任务栏 win7以上有效 Name "测试" OutFile "test.exe" Section CreateShortCut "$ ...
- Android有关JNI 学习(两)为JNI方法名称,数据类型和方法签名的一些知识
我们知道,使用javah产生c/c++当在头文件,将java定义 native 功能,以产生相应jni层功能,如下面: /* * Class: com_lms_jni_JniTest * Method ...
- 学习笔记之TCP/IP协议的重要性
1. 随处可见的协议 在计算机网络与信息通信领域里,人们常常提及"协议"一词.互联网中常 用的具有代表性的协议有IP.TCP.HITP等. 而LAN(局域网)中经常使用的协 ...
- socket抓取网页
#include <iostream> #include <string> #include <netdb.h> #include <stdio.h> ...
- iOS 生成随机颜色(UIColor)
#import <UIKit/UIKit.h> @interface UIColor (RandomColor) +(UIColor *) randomColor; @end #impor ...
- FutureTask解析(转)
站在使用者的角度,future是一个经常在多线程环境下使用的Runnable,使用它的好处有两个:1. 线程执行结果带有返回值2. 提供了一个线程超时的功能,超过超时时间抛出异常后返回. 那,怎么实现 ...