Thrift简介

Thrift是Facebook提供的一个跨语言的服务部署框架,可以实现客户端和服务器远程过程调用。相较于Google的grpc框架,Thrift对三方库依赖更少,编译更简单,并且运行效率也更高。Thrift只依赖boost、openssl和libevent三个库,测试demo只依赖openssl静态库,因此可以暂不编译boost和libevent,只需要在编译thrift的时候,引入boost源文件和libevent头文件即可。下面详细介绍thrift 0.13.0的编译过程。


一、编译boost

1、下载并解压boost源码

下载boost源码,下载地址:Boost C++ Libraries,下载后对比MD5,如果没问题,直接解压即可:

2、生成boost编译工具b2.exe

打开VS工具命令提示(例如VS2019为:x64 Native Tools Command Prompt for VS 2019), 定位到boost目录,执行下面的命令:

>.\bootstrap.bat

执行成功后,会在boost目录下生成b2.exe。

3、编译boost

执行下面的命令编译boost:

>b2.exe stage --toolset=msvc-14.2 address-model=64 --stagedir="E:\code\boost_1_74_0\CompileResult" threading=multi --build-type=complete --without -python link=static release

--toolset参数:需要和VS的平台工具集版本一致,否则编译thrift链接boost时,会出现版本不一致导致找不到对应的boost静态链接库的问题。

查看VS的平台工具集方法:打开任意VS项目,查看项目属性--配置属性--常规--平台工具集:

address-model参数:指定静态库是32位还是64位;

stagedir参数:编译结果目录

4、编译结果

编译成功后,会在<stagedir>目录下生成对应的boost静态链接库:

5、验证boost

新建VS工程,导入boost头文件和静态库,执行下面的代码验证boost是否编译成功:

#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main()
{boost::regex pattern("\\w+@\\w+(\\.\\w+)*");std::string mail("xxx@gmail.com");if (boost::regex_match(mail, pattern)) {std::cout << mail << " is a valid mail address!" << std::endl;}else {std::cout << mail << " is not a valid mail address!" << std::endl;}
}

二、编译openssl

1、下载并解压openssl源码

下载openssl源码,下载地址:/source/index.html

2、安装编译工具ActivePerl和NASM

2.1 安装ActivePerl

安装成功会有如下提示:

2.2 安装NASM汇编器

下载并安装 NASM 汇编器,并将 NASM 安装路径添加到系统环境变量 Path 中。
下载地址:https://www.nasm.us/https://www.nasm.us/
例如:nasm-2.13.01-installer-x64.exe

安装成功会有如下提示:

2.3 安装dmake.exe

>ppm install dmake

dmake安装成功,会有如下提示:

3、配置openssl编译环境

依次打开:开始菜单 -- 所有程序 -- Visual Studio 2019 -- Visual Studio Tools -- VC -- x64 Native Tools Command Prompt for VS 2019

注意这里一定不要选错了,编译64位就选择 x64 Native Tools Command Prompt for VS 2019,如果选错了则需要重新解压openssl到一个空目录重新编译,亲测在原目录使用nmake clean && nmake无效。

打开 x64 Native Tools Command Prompt for VS 2019,定位到openssl目录,执行命令配置openssl编译环境:

perl Configure VC-WIN64A no-asm no-shared --prefix=E:\code\oci-lib\openssl

VC-WIN64A:表示编译64位动态库,如果编译debug版本,则改成debug-VC-WIN64A,如果编译32位版本,则改成VC-WIN32;

no-asm:表示不使用汇编;

no-shared:表示静态链接;

prefix:编译目标路径;

4、编译openssl

执行命令:

nmake

如果编译报错,则:

①设置INCLUDE环境变量,包含VS系统头文件路径和Windows Kits系统头文件路径,例如:

(注意替换成自己的VS安装目录和Windows Kits目录)

E:\VS2019\VC\Tools\MSVC\14.27.29110\include;

C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt;

C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um;

C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared

②设置PATH环境变量,包含Windows Kits目录下的rc.exe路径,例如:

(注意替换成自己的Windows Kits目录)

C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64

③设置LIB环境变量,包含Windows Kits系统静态库路径,例如:

(注意替换成自己的Windows Kits目录)

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64

E:\VS2019\VC\Tools\MSVC\14.27.29110\lib\x64

5、编译结果

编译成功后,在openssl目录下可见相关静态库:


三、编译libevent

1、下载并解压libevent源码

下载libevent源码,下载地址为:libevent

2、修改libevent配置文件

修改Makefile.nmake文件中的LIBFLAGS变量,增加/MACHINE:X64选项以生成64为静态库:

LIBFLAGS=/nologo /MACHINE:X64

3、编译libevent

然后打开x64 Native Tools Command Prompt for VS 2019,定位到libevent目录,执行编译命令

>nmake -f Makefile.nmake

4、编译结果

编译成功生成libevent.lib、libevent_core.lib、libevent_extras.lib三个静态库:

5、libevent验证

新建VS工程,导入libevent头文件和静态库,执行下面的代码验证libevent是否编译成功:

#include <event.h>
#include <stdio.h>int main()
{const char *version = event_get_version();printf("%s\n",version);return 0;
}

四、编译thrift

1、下载并解压thrift源码

下载thrift源码,下载地址为:Apache Thrift - Download

或者:Index of /thrift

2、拷贝thrift依赖的头文件

将对应的boost、openssl、libevent的头文件拷贝到thrift项目对应的路径下,并修改项目的头文件引用目录:

3、修改代码

(1)修改thrift_export.h,添加#define thrift_EXPORTS

打开<thrift目录>\lib\cpp\src\thrift\thrift_export.h,在文件中添加#define thrift_EXPORTS

由于我们需要编译thrift生成静态链接库,因此需要添加定义:#define thrift_EXPORTS,将THRIFT_EXPORT设置为__declspec(dllexport)。

(2)如果出现下面的错误,则将报错的地方的

#include <thrift/config.h>

修改为

#include <config.h>

直接引用根目录下的config.h头文件

error msg:无法打开包括文件: “thrift/config.h”: No such file or directory

(3)修改thrift根目录下的config.h,注释掉部分宏定义,以屏蔽引用某些linux下的头文件:

error msg:无法打开包括文件: “netinet/in.h”: No such file or directory

(4)concurrency筛选器下面的部分源文件名称与源码目录下的文件名称不一致,需要移除后重新添加:

4、编译thrift

打开\thrift-0.13.0\lib\cpp下的VS工程文件,直接编译libthrift项目即可,注意在项目工程上右键:》属性-》c/c++-》代码生成-》运行库,选择对应的运行库加载模式,这里必须和调用 libthrift 的上层项目工程的配置一致。

多线程(/MT)与多线程(/MD)的区别:VS中的多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)的区别_深山里的小白羊的博客-CSDN博客_多线程调试 多线程调试dll

5、编译结果

编译成功后,会在<thrift目录>\lib\cpp\x64\Release目录下生成libthrift.lib

Thrift框架-Windows-C++ x64编译相关推荐

  1. Thrift 在Windows环境下的编译与简单C++应用

    前言 Thrift是Facebook提供的一个跨语言的服务部署框架,可以实现客户端和服务器远程过程调用.相较于Google的grpc框架,Thrift对三方库依赖更少,编译更简单,并且运行效率也更高. ...

  2. openh264 Windows 平台x64版本编译

    需求Windows x64支持h264编码的视频 pjsip如果需要支持h264编码格式的视频,需要引入openh264. openh264源码下载 https://github.com/cisco/ ...

  3. Thrift在Windows及Linux平台下的安装和使用示例

    thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的RPC(远程服务调用)框架. 本文主要目的是分别介绍在Windows及Linux平台下的Thri ...

  4. (转)Thrift在Windows及Linux平台下的安装和使用示例

    转载自Thrift在Windows及Linux平台下的安装和使用示例 thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的RPC(远程服务调用)框架 ...

  5. 【Thrift】Thrift框架和使用教程-- C/S框架使用教程

    1.前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和 ...

  6. Thrift框架介绍

    1.前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和 ...

  7. Windows环境VS2017编译skia库-m84,亲测成功,使用官方编译的方法

    环境准备 Windows7/10电脑需要能访问https://skia.org/和https://skia.googlesource.com/skia.git 在Windows上安装Visual St ...

  8. Qt最新版5.14在Windows环境静态编译安装和部署的完整过程 VS 2019-Qt static link build Windows 32 bit/64 bit

    文章目录 为什么要静态编译(static link) 1.源码下载/source code download 2. 编译工具下载/compiler download 编译环境选择:MinGW/MSVC ...

  9. Caffe Windows版本的编译

    2019独角兽企业重金招聘Python工程师标准>>> 1:Caffe的主版本只支持Linux,所以要下载专门的Caffe Windows版本,网址为 https://github. ...

最新文章

  1. 第九课.Python文件操作
  2. FixedSizeList的使用
  3. hibernate-jpa/hibernate-jpa-2.1-api-1.0.0.final.jar源代码下载地址
  4. c语言成绩等级switch语句,请高手 帮忙做一道c语言题 编程,把百分制成绩转换成5级记分制,要求用switch语句。 90分以上(包括90):...
  5. EmEditor小功能与使用技巧
  6. linux 光纤网卡 软路由,请教关于配置双网卡软路由的问题
  7. 计算机网络下一跳IP,计算机网络之IP地址
  8. 法制教育对未成年人的作用和实施字体
  9. MATLAB中范数norm()函数精讲
  10. 最简单的直播礼物连刷特效制作(带源码)
  11. 计算机科学技术学报官网convex,计算机学报chin
  12. 云原生 Kuma 简单部署与使用
  13. 今年能不能回家全靠这3个抢票工具了|2022版
  14. 回头看一看我的2019年
  15. 取消挂载是提示:device is busy
  16. 【视频】2017,50个令人屏息的科技瞬间
  17. 微核Linux(Tiny Core Linux)
  18. 关于tomcat启动后http://localhost:8080/打不开页面的解决方案
  19. vue+elementUI完成登陆+注册
  20. ContextMenuStrip 菜单的使用技巧

热门文章

  1. 存储区域网(SAN-Storage Area Network)
  2. python前端基础知识总结 及部分练习题
  3. 【论文简述及翻译】PSMNet:Pyramid Stereo Matching Network(CVPR 2018)
  4. Linux如何后台运行服务
  5. 考研调剂心得体会,给学弟学妹们的一些经验感想(希望对你们有所帮助)
  6. 团贷网Android客户端架构演进之路(上)
  7. 听说,你想干掉中介?
  8. Spring Security是什么?(一)
  9. Adobe_Creative_Cloud_Cleaner_Tool强制卸载
  10. Java 当前时间转农历