Thrift windows compile
安装准备
1. 安装boost
- 下载boost
- 执行脚本
bootstrap.bat
- 执行命令
b2.exe
- 执行命令
b2.exe install
(Optional)
导出boost include lib
2. 安装openssl
- 下载openssl
- 安装
- 安装activeperl,百度google自己找吧,官网下还得建账户
- 安装 nasm
- 把activeper和nasm添加到环境变量
- 编译
# 在vs 对应command prompt 中执行 perl Configure no-shared VC-WIN64A --prefix=E:\BuildOpenSSL3 # 添加no-shared 为编译静态库,不添加则是动态库 # VC-WIN64A 64位 nmake nmake install
3. 安装libevent
- 下载libevent
- 编译
note:如果编译x64,需要在Makefile.nmake
文件中的LIBFLAGS变量,增加/MACHINE:X64
nmake /f Makefile.nmake
- 获取lib
在win32下需要把Win32-Code/nmake
下的所有文件和文件夹拷贝到libevent导出的include
- 坑
-
libevent 在链接高版本openssl 时候会找不到 libeay32.lib 和ssleay32.lib 这两个文件
mklink ssleay32.lib libssl.lib mklink libeay32.lib libcrypto.lib
-
UINT32_MAX未定义
在mm-internal.h文件里面引入头文件: #include <stdint.h>
-
error LNK2019: 无法解析的外部符号 __imp_if_nametoindex
在test/Makefile.nmake中LIBS中添加
Iphlpapi.lib
LIBS=…\libevent.lib ws2_32.lib shell32.lib advapi32.libIphlpapi.lib
-
4. flex 和bison安装
- 下载 winflexbison
- 设置环境变量
把路径添加到path中就行了
thrift 安装
- 下载thrift 生成器
- 下载thrift源码
- 编译语言包
-
进入
lib\cpp
打开对应.sln
libtriftnb是加入libevent实现non-blocking工程 -
修改对应包含include目录
boost
openssl
libevent -
然后就是正常编译了,这是编译静态库.lib
如果编译的是静态库,应该取消符号导出,不然在使用的时候会报
无法解析的外部符号"class apache::thrift::TOutput apache::thrift::GlobalOutput"
需要添加预处理器宏THRIFT_STATIC_DEFINE
(可以查看导出文件:thrift_export.h)
动态库还没测试 -
编译可能出现的错误
- 出现无法找到 <thrift/configh>头文件时
将thrift\lib\cpp\src\thrift\windows\config.h拷贝到上一级目录。
或者直接替换为#include<config.h>
在使用的时候可能还会报config的错误,加入到include_directoris就行 - 出现PACKAGE_VERSION未声明的定义时
将根目录下 config.h 的宏定义 PACKAGE_VERSION 拷贝到 thrift\lib\cpp\src\thrift\config.h 文件内
- 出现无法找到 <thrift/configh>头文件时
-