您的位置:首页 > 其它

thrift安装说明(Windows下CYGWIN)

2011-09-04 00:24 666 查看
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端的界面变化:



同样,可以同时开启多个客户端!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: