msys下mingw编译thrift

本文档详细介绍了如何在Windows上利用MSYS2环境编译Thrift及其依赖库,包括openssl、boost、libevent和zlib。首先,讲解了各个库之间的依赖关系和编译顺序,强调了MSYS2的重要性。接着,阐述了MSYS2的安装和配置,包括修改源地址以加速下载,并安装不同版本的gcc。随后,依次介绍了openssl、boost、libevent的编译步骤。虽然zlib已包含在MSYS2中,但作者仍提到其存在。最后,由于thrift编译的复杂性,作者分享了在MSYS2下编译thrift的特殊步骤和注意事项,以及遇到的问题和解决方法。文章结尾处作者遗憾地表示,编译过程中才发现所有依赖项其实都可以通过MSYS2的软件包直接安装,避免了手动编译的麻烦。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.依赖关系

thrift依赖boost,libevent,zlib

libevent依赖openssl

所以编译顺序为openssl,livevent,boost,thrift,这些库在linux上编译比较方便,在windows上编译经常是问题一堆,想想都头疼,在windows上装一个类unix环境会丝滑不少,省不少事,常用的是msys2,所以我们可以说这些库全都依赖于msys2

先声明:所有的依赖包在msys里可以直接安装软件包,不用从源码编译,我都自己编了一遍后才发现,费了不少事

2.msys2安装

先到https://www.msys2.org/下载安装msys2,安装完以后只有基本的linux环境,编译环境需要单独安装,先修改msys源,官方源国内太慢,修改msys安装目录下的以下三个文件

文件/etc/pacman.d/mirrorlist.mingw32顶部增加一行

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686

文件/etc/pacman.d/mirrorlist.mingw64增加一行

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64

文件/etc/pacman.d/mirrorlist.msys增加一行

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch

启动msys控制台,安装gcc环境

安装64位gcc:pacman -S mingw-w64-x86_64-toolchain,gcc安装到mingw64目录
安装32位gcc:pacman -S mingw-w64-i686-toolchain,gcc安装到mingw32目录
使用上面两种方式安装的gcc,用mingw32.exe启动msys时,使用32位gcc,用mingw64启动msys时,使用64位gcc
用 pacman -S gcc make 安装安装的是64位gcc,gcc安装到/usr/lib目录,使用这种方式安装的gcc,如果没按上面两种方式安装toolchain,则无论怎么启动都是64位gcc

3.openssl编译

https://www.openssl.org/source/下载openssl源码,目前稳定版为1.1.1,下载这个即可,后面还会带一个字母,这个版本名也很有意思都从1.1.1a到1.1.1i了,就分三段,也不涨版本号,后面升字母编号,下一个版本号升到3.0了,还是预览版

解压openssl压缩包,启动msys,进入openssl目录,按照linux固定套路

$ ./config
$ make
$ make install

然后等着,运行完毕及编译完成,install时要注意install目录设置,如果安装目录指定了c盘,则要以管理员身份运行msys,否则没有权限创建目录和拷贝文件,修改安装目录为其他盘也可以

4.boost编译

https://www.boost.org/上下载boost源码,解压,在msys2里进入boost目录

执行
$ ./bootstrap.sh 生成编译工具
执行
$ ./b2 stage --toolset=gcc --stagedir=/d/apps/boost link=static runtime-link=shared threading=multi debug release

stage表示只生成dll和lib,不拷贝头文件,link=static表示调用boost的app使用静态方式链接boost,runtime-link表示boost调用其他库使用动态链接方式,threading表示编译为多线程版本,debug release表示同时生成debug版库文件和release库文件

5.libevent编译

https://libevent.org/上下载libevent源码,解压,在msys2里进入源码目录

$ ./configure
$ make
$ make install

make install 默认会安装在/mingw64/lib目录中,如想修改安装位置,找到源码目录下生成的Makefile文件,修改prefix = 想安装到的目录

6.zlib

用pacman -Q zlib查询发现,msys已经带了zlib

7.编译thrift

https://thrift.apache.org/download下载thrift源码,解压,msys进入thrift源码目录

执行
$ ./configure

执行完后,最后出的结果显示只编译python库,c++库不编译,还需要qt5,bison,byacc,flex,lex这一堆,实在不想在msys里再装

经过各种折腾,尝试了各种办法,在msys里configure,在windows里用cmake生成makefile,都不成功,msys因为依赖问题一直无法启用c++编译,cmake缺各种package,无法执行,最后在thrift源码里找到了再msys下编译的说明https://github.com/apache/thrift/blob/master/build/cmake/README-MSYS2.md,上面明确说了这种方式不支持nonblockserver编译,我只用客户端,不用服务端,也可以接受,照着上面的命令敲了一遍,编译成功,不过test的时候有一个没过,不知道是不是因为服务器不能编译的原因,回头试试能不能用吧

也是看到这里的时候才发现所有的依赖都可以直接安装软件包,不用自己一个个编译==__==

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值