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的时候有一个没过,不知道是不是因为服务器不能编译的原因,回头试试能不能用吧
也是看到这里的时候才发现所有的依赖都可以直接安装软件包,不用自己一个个编译==__==