thrift 源码vs2010编译lib

thrift最初由facebook开发用做系统内各语言之间的RPC通信 ,可跨平台,我以前用的都是Winodw RPC,现在项目中用到了这个开源库,想着学习下,试着编译个静态库用用

先从https://thrift.apache.org/download下载最新版本,我下载的是thrift-0.11版本

vs2010打开thrift-0.11.0\lib\cpp下的thrift.sln,会有两个工程,libthrift提供基本RPC服务端功能,是阻塞模式,另一个是libthriftnb。提供高级服务端功能,比如异步支持,非阻塞模式,但是依赖libevent,我目前只用了前者,暂时只详细说下libthrift编译过程

前者虽然不依赖libevent,但是依赖boost和openssl,需要自己手动去下载带lib库的编译版本的

然后设置对应的include和lib如下图

然后编译,刚开始编译,一堆问题,只能耐着性子一个个看,最前面错误提示如下图

定位到代码如下图

我们看到有一个HAVE_INTTYPES_H宏包含来确定生效与否,我们再定位下这个宏

注释第40行代码然后编译,果然那个错误全部没了,但是出现下面这个问题

这个问题是由于max和实际系统的编译器界定问题,google了一下,原来是需要把max用括号括起来避免和windows定义的宏混淆(std::numeric_limits::max)()
因为Windef.h中定义了
#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif
所以会产生编译错误
--------------------- 
作者:老衲不出家 
来源:CSDN 
原文:https://blog.csdn.net/tanningzhong/article/details/52890792 
版权声明:本文为博主原创文章,转载请附上博文链接!

然后出现几个下面的错误

这个是因为config.h在thrift\windows目录下,而且包含目录已经设置了thrift\windows,所以这里只需要把thrift/config.h改成config.h即可,然后编译,又出现下面错误

其实这个宏定义是在config.h文件的,不是叫PACKAGE_VERSION,而是VERSION,改成VERSION,然后编译出现下面的错误

编译到这里,基本所有的错误都集中在TNonblockingServer.h文件,明显这个应该是libthriftnb项目中需要的文件,不知道为啥出现在我们的libthrift项目中了,详细看了下,我也没包含这个文件呀,然后我就去看了下libthrift.vcxproj文件的内容

发现这个里面多了一条记录,奇了怪了哈,官网下载的源码,还能出现这种纰漏,恩,现在删除这条记录,然后编译,就成功了

 

如果想编译libthriftnb,估计和这个流程类似,多个libevent的包含设置吧,大家自行琢磨了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值