thrift安装说明(Windows下CYGWIN)

来源:互联网 发布:淘宝网店代理是什么 编辑:程序博客网 时间:2024/05/16 18:35
  

1、  /安装Cygwin:选择using IE5,否则下载不了对应的包;由于thrift需要的包很多,包含常用的boost、libtool 等,所以为了方便,将All Package改为所有安装,即将Default点击变为Install,不过这样要下载安装一段时间,需要耐心。

2、  安装好Cygwin,默认已经包含了Thrift需要的大部分包,具体包含以下必须的安装包:

GNU build tools (autoconf 2.60, automake 1.10, libtool 1.5.24)

boost 1.33.1+

g++ 4.0+

bison 2.3-1

boost 1.33.1-4

boost-devel 1.33.1-4

flex 2.5.33-1

pkgconfig

libtool

3、  安装JAVA编译JAR包所需的ANT包,以及Thrift Java所需的slf4j以及libevent,其中后者主要是用于提供设置服务器为non-blocking server,这样对于高并发访问有重要的帮助。

4、  首先安装ANT包,首先下载,这里我们用的是apache-ant-1.8.1-bin.tar,我把这个包首先放到了/usr/local/bin 目录下面,然后先解压该文件:tar –zxcf apache-ant-1.8.1-bin.tar

然后把apache-ant-1.8.1-bin.tar这个压缩文件放到/usr/local/src,主要是方便管理。接着系统可执行路径中加入指向ant的bin的路径就可以了,主要是修改/etc/profile文件,修改如下:

export ANT_HOME=/usr/local/bin/apache-ant-1.8.1

export PATH=/usr/local/bin/apache-ant-1.8.1/bin:$PATH

其中的路径要根据自己的包所放的位置进行设置。

然后为了生效该profile文件,需要执行:source /etc/profile

这样便安装好,执行ant,便会有如下提示,表明已经安装好。

5、  对于slf4j,首先从网上下载,我这里下载的是slf4j-1.6.1.tar.gz,然后解压缩:tar –zxvf slf4j-1.6.1.tar.gz,然后把该包也放到/usr/local/src,方便管理。其中该包在安装完Thrift后,编译JAVA所需的Thrift静态库libthrift.a所必需的,后面会详细说明。

6、  安装libevent,首先从网上下载,这里用的是libevent-1.4.14b-stable.tar.gz。先解压缩:tar –zxvf libevent-1.4.14b-stable.tar.gz,然后进入该解压缩的文件目录,执行以下命令:

./configure –prefix=/usr

Make

Make install

执行完后,可以执行下面命令测试是否安装成功。

 会出现以下结果,表明安装成功,并在/lib目录下面会有libevent.la等相关的静态库。

7、安装Thrift,详细参考:http://wiki.apache.org/thrift/ThriftInstallationWin32

首先解压缩thrift,这里我们用的是thrift-0.3.0版本,tar –zxvf thrift.tar.gz。

进入thrift-0.3.0目录,执行:./bootstrap.sh

生成环境对应的配置的脚本文件,然后执行:

export CXXFLAGS="-D PTHREAD_MUTEX_RECURSIVE_NP=PTHREAD_MUTEX_RECURSIVE"

这个很重要,不然在编译Thrift C++库文件的时候,会提示:PTHREAD_MUTEX_RECURSIVE_NP没有申明。

然后执行:./configure

这个需要一段时间,耐心等待命令执行完成。

再执行:

cd compiler/cpp

make

make install

执行完以上命令,下面通过:thrift,命令,便可以测试是否安装成功。如果有如下提示,表明已经安装成功!

8、配置JAVA 的thrift环境,进入thrift-0.3.0目录下面的lib/java目录,然后执行ant,会在该目录下面生成libthrift.jar文件。其中最后会提示build successful,在目录下面会自动多了个libthrift.jar。

9、编译设置JAVA Thrift环境,进入tutorial目录,

Cd /tutorial/

执行:

Thrift --gen java tutorial.thrift

Thrift –gen java shared.thrift

在该目录下面会自动生成gen-java目录,然后进入JAVA 目录,由于官网的JAVA 源程序是错误的,我是请了朋友改动的,具体改什么地方,我没怎么问!同样,那个build.xml:

<project name="tutorial" default="tutorial" basedir=".">

    <property name="src" location="src" />

    <property name="gen" location="../gen-java" />

    <property name="build" location="build" />

    <property name="build.src" location="build/build.src" />

    <property name="build.sysclasspath" value="ignore"/>

   

    <path id="cpath">

       <fileset dir="../../lib/java">

           <include name="*.jar"/>

       </fileset>

    </path>

   

    <target name="init" depends="clean">

       <mkdir dir="${build}"/>

       <copy todir="${build.src}">

            <fileset dir="${src}">

            </fileset>

        </copy>

       <copy todir="${build.src}">

           <fileset dir="${gen}">

            </fileset>

        </copy>

    </target>

 

    <target name="compile" depends="init">

       <javac srcdir="${build.src}" destdir="${build}">

           <classpath refid="cpath"/>

       </javac>

    </target>

 

    <target name="tutorial" depends="compile">

       <jar jarfile="tutorial.jar" basedir="${build}"/>

    </target>

 

    <target name="clean">

       <delete dir="${build}" />

       <delete file="tutorial.jar" />

       <delete file="${build.src}" />

    </target>

 

</project>

其中主要是库的设置,这里需要把刚才的slf4j,把那个文件夹下面的slf4j-api-1.6.1.jar、slf4j-jdk14-1.6.1.jar、slf4j-log4j12-1.6.1.jar、slf4j-simple-1.6.1.jar。复制到/lib/java目录下面。

<fileset dir="../../lib/java">

<include name="*.jar"/>

</fileset>

设置完之后,执行:ant

会自动在该目录下面生成build目录,下面会有JavaClient.class以及JavaServer.class.输出如下:

gpuserver@gpuserver-PC /usr/local/bin/thrift-0.3.0/tutorial/java

$ ant

Buildfile: C:\cygwin\usr\local\bin\thrift-0.3.0\tutorial\java\build.xml

 

clean:

   [delete] Deleting directory C:\cygwin\usr\local\bin\thrift-0.3.0\tutorial\jav

a\build

 

init:

    [mkdir] Created dir: C:\cygwin\usr\local\bin\thrift-0.3.0\tutorial\java\buil

d

     [copy] Copying 2 files to C:\cygwin\usr\local\bin\thrift-0.3.0\tutorial\jav

a\build\build.src

     [copy] Copying 7 files to C:\cygwin\usr\local\bin\thrift-0.3.0\tutorial\jav

a\build\build.src

 

compile:

    [javac] Compiling 9 source files to C:\cygwin\usr\local\bin\thrift-0.3.0\tut

orial\java\build

    [javac] 注意:某些输入文件使用或覆盖了已过时的 API。

    [javac] 注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。

 

tutorial:

      [jar] Building jar: C:\cygwin\usr\local\bin\thrift-0.3.0\tutorial\java\tut

orial.jar

BUILD SUCCESSFUL

Total time: 1 second

 

 

这样整个JAVA Thrift环境就配置起来!

 

10、Thrift C++环境配置:

首先也是要配置LIB,进入lib/cpp目录,直接执行make

则会出现下面的错误提示:

提示malloc和free函数没有申明,则打开thrift.cpp文件,在头文件下面添加:

#include <malloc.h>

然后保存,在执行刚才的命令。执行过程中会生成很多.o和.la文件,在该目录的.libs目录下面,会看到libthrift.a这样的文件,表明该静态库已经生成!

由于想要利用动态库 libthrift.so,还需要执行make install,这样会自动生成对应的动态库.

 

11、测试Thrift C++的例子,进入tutorial目录:

Cd /tutorial/

执行:

Thrift --gen cpp tutorial.thrift

Thrift –gen cpp shared.thrift

在该目录下面会自动生成gen-cpp目录,然后进入cpp目录,

执行make,那么会出现很多错误,主要是环境的设置,具体要修改makefile文件!

修改如下:

BOOST_DIR = /usr/include/boost/

THRIFT_DIR = /usr/local/bin/thrift-0.3.0/

LIB_DIR = /lib

GEN_SRC = ../gen-cpp/SharedService.cpp ../gen-cpp/shared_types.cpp ../gen-cpp/tutorial_types.cpp ../gen-cpp/Calculator.cpp

THRIFT_O=$(THRIFT_DIR)/lib/cpp

LTHRIFT=$(THRIFT_O)/Thrift.o $(THRIFT_O)/TSocket.o $(THRIFT_O)/TBinaryProtocol.o $(THRIFT_O)/TBufferTransports.o $(THRIFT_O)/TServerSocket.o $(THRIFT_O)/TSimpleServer.o $(THRIFT_O)/TApplicationException.o

 

default: server client

 

server: CppServer.cpp

    g++ -o CppServer -I${THRIFT_DIR} -I${BOOST_DIR}  -I../gen-cpp -L${LIB_DIR} $(LTHRIFT) CppServer.cpp ${GEN_SRC}

 

client: CppClient.cpp

    g++ -o CppClient -I${THRIFT_DIR} -I${BOOST_DIR}  -I../gen-cpp -L${LIB_DIR} $(LTHRIFT) CppClient.cpp ${GEN_SRC}

 

clean:

    $(RM) -r CppClient CppServer

 

其中原因详细见:http://wiki.apache.org/thrift/ThriftInstallationWin32

Linking to installed C++ runtime libraries:

Sometimes, the installed libthrift.a will not link using g++, with linker errors about missing vtables and exceptions for Thrift classes.

A workaround is to link the compiled object files directly from your Thrift build, corresponding to the missing classes.

This can be implemented in a Makefile using the following lines:

        THRIFT_O=<path to>/thrift/lib/cpp
        LTHRIFT=$(THRIFT_O)/Thrift.o $(THRIFT_O)/TSocket.o $(THRIFT_O)/TBinaryProtocol.o $(THRIFT_O)/TBufferTransports.o

Then linking using $(LTHRIFT) instead of -lthrift.

TODO - diagnose issue further

同时要设置下默认的thrift include目录,将lib/cpp/src,将该目录下面的thrift头文件均拷贝到tutorial/gen-cpp目录下面,然后执行make

则会在/tutorial/cpp目录下面生成CppClient.exe以及CppServer.exe。

 

执行该程序:

./CppServer

则会出现如下界面:

然后在本地在开一个cygwin,然后进入到刚才的目录,执行./CppClient

界面如下:

同样可以看到对应的刚才的Server端的界面变化:

同样,可以同时开启多个客户端!

原创粉丝点击