Muponder

为者常成,行者常至。

C++博客 首页 新随笔 联系 聚合 管理
  1 Posts :: 7 Stories :: 7 Comments :: 0 Trackbacks
最近在研究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. 编译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官网。

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.

   5.3. 生成3个lib文件(libevent_core.lib, libevent_extras.lib, libevent.lib)存放在libevent-2.0.21-stable目录下。
          新建一个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文件夹下。

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路径)。

    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。   

      7.2. thrift2接口使用,请访问Apache Thrift官网、开源文件中的示例代码、生成的hbase数据库访问接口生成(hbase_constants.h/cpp, hbase_types.h/cpp,THBaseService.h/cpp)。

posted on 2015-07-05 00:41 盛源博 阅读(2340) 评论(0)  编辑 收藏 引用 所属分类: Open Source

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理