背景
Windows下thrift的编译还挺麻烦的,故在此记录编译thrift的时候的一些坑(2019-11-13)
第三方库(boost、libevent、openssl)
- 问题一:vcpkg巨慢,还不一定能下载自己直接编译
- 问题二:直接下载exe没有include目录,还是不行
OpenSSL(版本:1.1.1d)
- 推荐直接使用Windows安装包安装:OpenSSL官方下载 - 码客
- 源码安装:example: Windows 下编译 OpenSSL
- 很多地方会选择no-asm的模式,目前的经验来看,直接安装nasm然后,不要no-asm是最靠谱的opessl是最基本的库,需要先安装perl,然后配置
- 下载并安装NASM:Index of /pub/nasm/releasebuilds/2.15.04/win64
- 安装的时候记得看路径,需要手动把路径添加到PATH
- 下载并安装PERL:Download Perl for development use: ActivePerl | ActiveState
- 如果发现perl缺少模块的话,可以参考(ppm doesn't work after installing ActiveState Perl)进行添加
perl
- 编译&安装:
nmake
nmake install
Boost(版本:1.71.0)
- 这个库是最大的,但是是最成熟的,这里编译的x64版本,基本没有遇到什么问题
- 需要注意的就是1.71.0的bjam由b2代替,完整命令如下:
"D:Boost" link=static runtime-link=shared runtime-link=static threading=multi debug release
Libevent(版本:2.1.11)
- 编译时候会报错:需要根据错误提示进行修改,这里的UINT32_MAX未定义的问题
- 需要到对应的文件添加:#include <stdint.h>
- 编译: nmake /f Makefile.nmake
- 由于windows下要区分MT,MD,MTd,MDd的原因所以还是用cmake生成VS项目产生对应的库
- 第一个问题:
CMake Error: File D:/libevent-2.1.11-stable/cmake/Uninstall.cmake.in does not exist.
CMake Error at CMakeLists.txt:1498 (configure_file):
configure_file Problem configuring file
- 到对应的CMakeLists.txt:1498会发现一个地址:https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake, 将这里的代码复制下来并保存成D:/libevent-2.1.11-stable/cmake/Uninstall.cmake.in即可
Thrift (版本:0.12.0)
- 截至到2019-11-13,thrift-0.13.0其实已经发布,但是windows下的版本有比较多的问题,所以使用的0.12.0版本
- 下载源码之后需到thrift-0.12.0/lib/cpp先找到3rdparty.props文件,修改BOOST_ROOT、LIBEVENT_ROOT、OPENSSL_ROOT_DIR分别指向对应的路径
- 找不到envent2/event-config.h的问题需要把libevent的WIN32-Core下面的nmake/event2/event-config.h拷贝到include/event2
- 找不到thrift/config.h的问题,需要在src/thrift/下面自己创建文件,并添加如下几行:
#include
- 最诡异的错误:找不到openssl/ssl.h
- thrift.sln中有两个项目,其中thriftnb是non-block的意思本来是不依赖openssl的,但是VS下就是会报这个错误,所以需要修改libthriftnb.vcxproj,把OPENSSL_ROOT_DIRinclude放到IncludePath里面
- 注:我这里直接在VS里面改是不行的,生成的时候会被覆盖,修改如下(在libthriftnb.vcxproj的152~176行):
<PropertyGroup