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和实际系统的编译器界定问题,需要属性-c/c++-预处理器-预处理器定义加个宏NOMINMAX;即可

然后出现几个下面的错误

这个是因为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的包含设置吧,大家自行琢磨了

猜你喜欢

转载自blog.csdn.net/u010340160/article/details/84613016