Windows 8.1 Visual Studio 2013 编译Apache thrift访问Apache Hbase
最近在研究Window平台下访问Apache Hbase数据库,然后第一步就是编译Thrift库,我的编译过程如下:
1. 环境: Windows8.1 Visual Studio 2013
2. 编译准备:
2.1 http://www.activestate.com/activeperl/downloads 下载 ActivePerl-5.20.2.2001-MSWin32-x64-298913.exe。
2.2 http://www.openssl.org/source/ 下载openssl源文件。
2.3 http://www.boost.org/ 下载boost库文件
2.4 http://www.apache.org/dyn/closer.cgi/hbase/ 下载hbase源代码数据库。
2.5 http://thrift.apache.org/ 下载windows版本下的 Apache Thrift库源文件,包括(thrift-xx.exe及thrift-xx.tar.gz)
2.6 http://libevent.org/ 下载libevent库, 如(libevent-2.0.22-stable.tar)
3. 2.3 输入命令 ms\do_win64a
1. 环境: Windows8.1 Visual Studio 2013
2. 编译准备:
2.1 http://www.activestate.com/activeperl/downloads 下载 ActivePerl-5.20.2.2001-MSWin32-x64-298913.exe。
2.2 http://www.openssl.org/source/ 下载openssl源文件。
2.3 http://www.boost.org/ 下载boost库文件
2.4 http://www.apache.org/dyn/closer.cgi/hbase/ 下载hbase源代码数据库。
2.5 http://thrift.apache.org/ 下载windows版本下的 Apache Thrift库源文件,包括(thrift-xx.exe及thrift-xx.tar.gz)
2.6 http://libevent.org/ 下载libevent库, 如(libevent-2.0.22-stable.tar)
3. 编译OpenSSL
3.1. 安装ActivePerl
运行并安装ActivePerl-5.20.2.2001-MSWin32-x64-298913.exe程序,一切按默认执行就可以。
3.2. 编译OpenSSL
3.2.1 解压缩openssl-maste到指定路径,如C:\openssl。
3.2.2 以管理员身份运行visual studio 2013目录下的 x64本机工具命令提示工具,并定位到openssl根目录下,如C:\openssl\opensl-master\,
输入命令:
perl Configure VC-WIN64A no-asm enable-deprecated --prefix=c:\openssl
3. 2.3 输入命令 ms\do_win64a
3.
2.4 输入命令 "xx\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe" -f ms\nt.mak (ms\nt.mak是编译链接静态库,ms\ntdll.mak是编译链接动态库)
3.
2.5 如果编译成功,可使用 "xxx\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe" -f ms\nt.mak test 命令验证
3.2.6 如果重新编译,需先执行 "xxx\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe" -f ms\nt.mak clean 命令清除上一次编译产生的中间文件。
3.
2.7 如果编译32bit,第2步使用x86的工具命令提示工具,并修改VC-WIN64A为VC-WIN32, 第3步ms\do_win64a改为ms\do_ms, 第4, 5, 6步直接使用nmake 代替 "xx\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe"。
3.
2.8 默认编译出来的链接库是debug版本的,如果需要编译release版本的,修改第2步命令,添加编译选项参数 no-debug。
3.
3. OpenSSL输出目录
根据编译文档说明,x86和x64输出的路径和名称均相同。
include路径:openssl解压路径\openssl-master\include。
静态链接库lib路径及名称:
openssl解压路径\openssl-master\out32\( libeay32.lib和ssleay32.lib)
动态链接库lib,dll路径及名称:
openssl解压路径\openssl-master\out32dll\(libeay32.lib,libeay32.dll
和ssleay32.lib,ssleay32.dll)
4 编译Boost库
4.1. 解压缩boost_1_55_0.zip,管理员运行方式运行visual studio 2013目录下的 x64本机工具命令提示工具,并定位到boost_1_55_0文件夹的根路径下,运行bootstrap.bat 生成bjam.exe。
4.2.执行命令 bjam --toolset=msvc-12.0 address-model=64 link=static runtime-link=shared --build-type=complete stage 编译好要30分钟左右,
部分库可能会由于编译环境文件的缺失而导致编译失败,如zlib,eventlib,python。更多的编译说明,请查看boost官网。
部分库可能会由于编译环境文件的缺失而导致编译失败,如zlib,eventlib,python。更多的编译说明,请查看boost官网。
5 编译EventLib库(仅libthriftnb库需要)
5.1. 解压缩libevent-2.0.22-stable.tar文件,使用ue或者其它文本编译器,修改以下三个文件,在以下3个文件开头添加“#define _WIN32_WINNT 0x0500”
libevent-2.0.21-stable\event_iocp.c
libevent-2.0.21-stable\evthread_win32.c
libevent-2.0.21-stable\listener.c
5.2. 管理员运行方式运行visual studio 2013目录下的 x64本机工具命令提示工具,并定位到libevent-2.0.21-stable文件夹的根路径下,
运行"xx\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe" /f Makefile.nmake.
运行"xx\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe" /f Makefile.nmake.
5.3. 生成3个lib文件(libevent_core.lib, libevent_extras.lib, libevent.lib)存放在libevent-2.0.21-stable目录下。
新建一个include文件夹,用于存放libevent的头文件,新建一个lib文件夹,用于存放生成的lib库;
新建一个include文件夹,用于存放libevent的头文件,新建一个lib文件夹,用于存放生成的lib库;
5.4. 将libevent-2.0.21-stable目录下的所有.h文件拷贝到新建的include文件夹下,libevent-2.0.21-stable\include文件夹下的文件及文件夹一块拷贝到到include文件夹下,
将libevent-2.0.21-stable\WIN32-Code\tree.h拷贝到include文件夹下,将libevent-2.0.21-stable\WIN32-Code\event2\event-config.h拷贝到include文件夹下的event2文件夹下。
将libevent-2.0.21-stable\WIN32-Code\tree.h拷贝到include文件夹下,将libevent-2.0.21-stable\WIN32-Code\event2\event-config.h拷贝到include文件夹下的event2文件夹下。
6 编译Thirft库
6.1. 生成访问hbase数据库cpp接口文件
6.1.1 解压缩hbase-1.0.1.1-src.tar.gz, 获取hbase库中的thrift文件。
thrift文件包括thrift和thrift2,所在路径如下:
hbase-1.0.1.1-src\hbase-1.0.1.1\hbase-thrift\src\main\resources\org\apache\
hadoop\hbase\thrift\Hbase.thrift.
hbase-1.0.1.1-src\hbase-1.0.1.1\hbase-thrift\src\main\resources\org\apache\
hadoop\hbase\thrift2\hbase.thrift.
注: 官网推荐使用thrift2, 故选择了thrift2,并且hbase下也支持thrift2服务。
6.1.2 管理员方式运行命令提示符工具,定位到thrift-0.9.2.exe所在目录,输入命令:
thrift-0.9.2 --gen cpp
hbase-1.0.1.1-src\hbase-1.0.1.1\hbase-thrift\src\main\resources\org\
apache\hadoop\hbase\thrift2\hbase.thrift
执行结束后,可以在thrift-0.9.2.exe所在目录下自动生成gen-cpp文件夹,文件夹里包括hbase_constants.h/cpp, hbase_types.h/cpp, THBaseService.h/cpp,
THBaseService_server.skeleton.cpp(此文件在开发过程中是不需要的,可以删除)共计7个文件。
6.2. 编译Thrift库
6.2.1 解压缩thrift-0.9.2.tar.gz,打开thrift-0.9.2\lib\cpp目录下的thrift.sln工程,里面包含两个工程thrift(阻塞)和thriftnb(非阻塞)库。
6.2.2 添加两个工程中对boost库lib路径,include路径的引用,openssl库的include路径引用(存放路径\openssl\include)和lib路径引用;对于阻塞库,
还需要额外添加对libevent库的include和lib路径的引用(即上面步骤新建lib和include路径)。
还需要额外添加对libevent库的include和lib路径的引用(即上面步骤新建lib和include路径)。
6.2.3并添加OPENSSL_USE_DEPRECATED宏的定义,编译32/64 bit的thrift和thriftnb库。
7 使用Thrift库
7.1. windows平台下,需要引入编译输出的thrift库或者thriftnb库和include路径的引用(thrift-0.9.2\lib\cpp\src和thrift-0.9.2\lib\cpp\src\thrift),
同时添加hbase数据库访问接口生成文件(hbase_constants.h/cpp, hbase_types.h/cpp,THBaseService.h/cpp),还需要添加boost库的include和lib引用,添加thrift。
同时添加hbase数据库访问接口生成文件(hbase_constants.h/cpp, hbase_types.h/cpp,THBaseService.h/cpp),还需要添加boost库的include和lib引用,添加thrift。
7.2. thrift2接口使用,请访问Apache Thrift官网、开源文件中的示例代码、生成的hbase数据库访问接口生成(hbase_constants.h/cpp,
hbase_types.h/cpp,THBaseService.h/cpp)。