win10+VS2015编译thrift

一、环境

操作系统:windows 10专业版

开发工具:VS2015

       因thrift依赖boost、libevent、openssl、zlib,因此需要先编译这些库。网上有很多编译thrift的方法,但很多都不全,作者经过自己探索,记录以下详细步骤,以下编译步骤亲测可用。

相关源码下载地址:

https://download.csdn.net/download/xzhswust/86543148


二、编译步骤

1、vs2015编译boost

   (1)、解压boost_1_75_0.7z到D:\soft,解压后路径为D:\soft\boost_1_75_0
   (2)、在soft目录下创建boost_build文件夹;
   (3)、开始菜单->visual studio 2015->VS2015 x86 x64 兼容工具命令提示符;
          注:编译64位的动态库使用该命令提示符工具,编译其他版本选择对应的命令提示符工具
   (4)、在命令提示符工具中输入如下命令:
          cd D:\soft\boost_1_75_0
          bootstrap.bat
b2 stage --toolset=msvc-14.0 architecture=x86 address-model=64 --without-graph --without-graph_parallel --stagedir="D:\soft\boost_build" link=static runtime-link=shared runtime-link=static threading=multi debug release
   (6)、编译需要10-30分钟,编译完成后,最终的boost库在D:\soft\boost_build下面;
   (7)、将D:\soft\boost\include\boost-1_75\boost目录拷贝到D:\Program Files\boost_1_75_0\vs2015\x64\include目录下;
   (8)、将D:\soft\boost_build\lib目录下的所有文件拷贝到D:\Program Files\boost_1_75_0\vs2015\x64\lib目录下;

2、vs2015编译libevent

  (1)、解压libevent-2.1.12-stable.tar.gz到D:\soft,解压后路径为D:\soft\libevent-2.1.12-stable;
  (2)、记事本打开D:\soft\libevent-2.1.12-stable\minheap-internal.h,在文件头添加#include<stdint.h>
         注:如果不加该头文件,会报UINT32_MAX”未声明的标识符的错误
  (3)、开始菜单->visual studio 2015->VS2015 x86 x64 兼容工具命令提示符;
      注:编译64位的动态库使用该命令提示符工具,编译其他版本选择对应的命令提示符工具
  (4)、在命令提示符工具中输入如下命令:
      cd D:\soft\libevent-2.1.12-stable;
      nmake /f Makefile.nmake static_libs
      注:全量编译:nmake /f Makefile.nmake [all] //all可以省略,默认是all  
          库编译:  nmake /f Makefile.nmake static_libs  
          测试编译:nmake /f Makefile.nmake tests  
          清理输出:nmake /f Makefile.nmake clean
      编译完成,在D:\soft\libevent-2.1.12-stable目录下会生成 libevent.lib、libevent_core.lib和libevent_extras.lib动态库;
  (5)、将生成的3个动态库拷贝到D:\Program Files\libevent-2.1.12-stable\vs2015\x64\lib目录下;
  (6)、将D:\soft\libevent-2.1.12-stable\include目录拷贝到D:\Program Files\libevent-2.1.12-stable\vs2015\x64\include;
  (7)、将D:\soft\libevent-2.1.12-stable\WIN32-Code\nmake\event2\event-config.h文件拷贝到D:\Program Files\libevent-2.1.12-stable\vs2015\x64\include\event2目录下;

3、vs2015编译openssl

   (1)、解压perl-5.24.0-mingw32.zip到C:\perl-5.24.0,环境变量path中增加C:\perl-5.24.0\bin;
   (2)、解压openssl-1.1.1p.tar.gz到D:\soft,解压后路径D:\soft\openssl-1.1.1p;
   (3)、开始菜单->visual studio 2015->VS2015 x86 x64 兼容工具命令提示符;
          注:编译64位的动态库使用该命令提示符工具,编译其他版本选择对应的命令提示符工具
   (4)、在命令提示符工具中输入如下命令:
      cd D:\soft\openssl-1.1.1p
          mkdir build
          perl Configure VC-WIN64A no-asm --perfix="D:\soft\openssl-1.1.1p\build"
          nmake
          nmake test    #测试,执行很慢,可不执行
          注:这里VC-WIN64A代表目标是64位库,VC-WIN32 代表是32位库,no-asm编译过程中不使用汇编代码加快编译过程。
   (5)、将D:\soft\openssl-1.1.1p目录下编译后的libcrypto.lib、libcrypto_static.lib、libcrypto-1_1-x64.dll、libssl.def、libssl.lib、libssl_static.lib、libssl-1_1-x64.dll拷贝到D:\Program Files\openssl-1.1.1\vs2015\x64\lib目录下;
   (6)、将D:\soft\openssl-1.1.1p\include目录拷贝到D:\Program Files\openssl-1.1.1\vs2015\x64\include;

4、vs2015编译zlib

   (1)、解压zlib-1.2.10.tar.gz到D:\soft,解压后路径为D:\soft\zlib-1.2.10;
   (2)、开始菜单->visual studio 2015->VS2015 x86 x64 兼容工具命令提示符;
          注:编译64位的动态库使用该命令提示符工具,编译其他版本选择对应的命令提示符工具
   (3)、在命令提示符工具中输入如下命令:
      cd D:\soft\zlib-1.2.10\contrib\masmx64    #注:如果编译32位版本,则为masmx32目录
          bld_ml64.bat   #执行完成后生成inffasx64.obj和gvmat64.obj文件,复制D:\soft\zlib-1.2.10目录下
          cd D:\soft\zlib-1.2.10
          nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="inffasx64.obj gvmat64.obj"
   (4)、编译后的文件在D:\soft\zlib-1.2.10目录下,将zdll.lib、zlib.lib拷贝到D:\Program Files\zlib-1.2.10\vs2015\x64\lib;
   (5)、将D:\soft\zlib-1.2.10目录下zlib.h、zutil.h、zconf.h文件拷贝到D:\Program Files\zlib-1.2.10\vs2015\x64\include目录下;  


5、vs2015编译thrift静态库

   (1)、将D:\soft\thrift-0.14.1\config.h文件拷贝到D:\soft\thrift-0.14.1\lib\cpp\src\thrift目录下;不然在编译的时候会报找不到<thrift/config.h>文件;
   (2)、修改拷贝过去的config.h文件,将所有HAVE开头的宏都注释掉;
   (3)、使用vs2015打开D:\soft\thrift-0.14.1\lib\cpp\thrift.sln解决方案文件;
   (4)、打开后可以看到libthrift和libthriftnb两个工程,这里我们编译libthrift即可,在libthrift鼠标右键,
      libthrift->属性->C/C++->常规->附加包含目录中添加D:\Program Files\boost_1_75_0\vs2015\x64\include;D:\Program Files\libevent-2.1.12-stable\vs2015\x64\include;D:\Program Files\openssl-1.1.1\vs2015\x64\include;
      libthrift->属性->库管理器->常规->附加库目录中添加D:\Program Files\boost_1_75_0\vs2015\x64\lib;D:\Program Files\libevent-2.1.12-stable\vs2015\x64\lib;D:\Program Files\openssl-1.1.1\vs2015\x64\lib;
      注:libthriftnb工程是非阻塞(non-blocking)模式的服务器,非阻塞模式需要依赖libevent库;(实际编译情况来看libthrift也依赖libevent库)
   (5)、从工程中移除concurrency/BoostMonitor.h、concurrency/BoostMonitor.cpp、concurrency/Util.cpp三个文件,因为目录下无这3个文件;
   (6)、将D:\soft\thrift-0.14.1\lib\cpp\src\thrift\concurrency目录中的所有的.h和.cpp文件都添加到工程中(因为默认的工程中缺少一些文件);
   (7)、从工程中打开transport/TSSLSocket.h,搜索THRIFT_EXPORT static bool manualOpenSSLInitialization_;删除这句代码中的THRIFT_EXPORT;
   (8)、编译Debug版本时在libthrift>属性->常规->目标文件名,修改为$(ProjectName)d,这样生成出来的Debug版本thrift库文件名为libthriftd.lib;
   (9)、编译Release版本,安装步骤4中的方式添加附加包含目录和附加库目录,编译后的Release版本thrift库文件名为libthrift.lib;
   (10)、将D:\soft\thrift-0.14.1\lib\cpp\Debug\libthriftd.lib和D:\soft\thrift-0.14.1\lib\cpp\Release\libthrift.lib拷贝到D:\Program Files\thrift-0.14.1\vs2015\x64\lib目录下;
   (11)、将D:\soft\thrift-0.14.1\lib\cpp\src\thrift目录拷贝到D:\Program Files\thrift-0.14.1\vs2015\x64\include目录下;
           注:只拷贝头文件即可,但因为thrift头文件和cpp文件都在该目录下,如果只拷贝头文件,需要一个一个去找,很麻烦,因此为了简便全部拷贝过去;

6、vs2015编译thrift生成工具程序

   (1)、解压thrift-0.14.1.tar.gz到D:\soft\thrift-0.14.1,使用vs2015打开D:\soft\thrift-0.14.1\compiler\cpp\compiler.sln解决方案文件;
   (2)、在项目属性(compiler->属性->生成事件->预先生成事件)中去掉生成事件中的内容;
   (3)、选择Release,编译Release版本即可,生成的thrift.exe文件在D:\soft\thrift-0.14.1\compiler\cpp\Release目录下,可以用该工具生成IDL文件对应的源代码;
   (4)、将生成的thrift.exe文件复制到D:\Program Files\thrift-0.14.1\vs2015\x64\bin目录下;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值