zoukankan      html  css  js  c++  java
  • 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 --enable-libs=no 切换来编译IDL编译器,而不编译语言库。使用make 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:MINGWBIN
    

    接着,打开文件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  #演示样例指南文件夹
    

  • 相关阅读:
    关于HTTP协议,一篇就够了
    jvm在什么情况下会执行GC
    为什么我们做分布式使用Redis?
    linux入门系列
    linux学习笔记-13.进程控制
    linux学习笔记-12.输入输出重定向及管道
    app获取自己的签名
    安卓给微信公众号发消息
    微信扫码下载apk
    设备通道开启关闭状态
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4298752.html
Copyright © 2011-2022 走看看