操作系统:windows 10专业版
Qt:5.12.10,安装路径D:\Qt\Qt5.12.10
因thrift依赖boost、libevent、openssl、zlib,因此需要先编译这些库。网上有很多编译thrift的方法,但很多都不全,作者经过自己探索,记录以下详细步骤,以下编译步骤亲测可用。
在编译Windows下MinGW版本的thrift时,因为无法在msys里面直接用./configure、make、make install的方法进行编译,网上很多方法只说了如何编译boost、libevent、openssl、zlib等依赖库,到编译thrift时因为太过复杂就直接结束了。为方便大家编译thrift,作者做了一个pro文件,可直接在Qt Creator打开后进行编译。
文章中使用到的msys、perl、openssl、boost、libevent、libthrift.pro、compiler.pro等下载地址:
https://download.csdn.net/download/xzhswust/86543148
(1)、解压perl-5.24.0-mingw32.zip到C:\perl-5.24.0;
(2)、环境变量path中添加C:\perl-5.24.0\bin;
(1)、点击MSYS-1.0.11.exe执行安装,默认安装就行,安装过程中控制台会提示y/n?,输入y,再敲回车,继续执行安装即可;
(2)、记事本打开C:\msys\1.0\etc\fstab.sample,修改c:/mingw/mingw为D:/Qt/Qt5.12.10/5.12.10/mingw73_64
(3)、修改c:/ActiveState/perl为C:/perl-5.24.0/bin
(1)、安装Qt(使用的是5.12.10),如果已安装则跳过该步骤;
(2)、解压boost_1_75_0.7z到D:\soft,解压后路径为D:\soft\boost_1_75_0
(3)、在soft目录下创建boost和boost_build两个文件夹;
(4)、在D:\soft\boost_1_75_0目录下创建build目录;下面第(5)和第(6)两种方式可以任选一种:
(5)、用windows控制台编译
PATH环境变量中添加D:/Qt/Qt5.12.10/Tools/mingw730_64/bin,目的是为了在cmd中能执行gcc和g++命令;
打开cmd,执行下面命令:
cd /d/soft/boost_1_75_0
bootstrap.bat gcc
b2 install --prefix="D:\soft\boost_build"
b2 --build-dir="D:\soft\boost_1_70_0\build" --prefix="D:\soft\boost" toolset=gcc install
编译需要10-30分钟,编译完成后,可以把D:\soft\boost_build和D:\soft\boost_1_75_0\build两个目录删掉,最终的boost库安装在D:\soft\boost里面;
将D:\soft\boost\include\boost-1_75\boost目录拷贝到D:\Program Files\boost_1_75_0\mingw730\x64\include目录下;
将D:\soft\boost\lib目录下的所有文件拷贝到D:\Program Files\boost_1_75_0\mingw730\x64\lib目录下;
(6)、用msys编译
打开MSYS(双击C:\msys\1.0\msys.bat),执行如下命令
export PATH=$PATH:/d/Qt/Qt5.12.10/Tools/mingw730_64/bin #注意这里路径不能为D:/,必须修改为/D/,这里注意反斜杠,因为是模拟unix环境,因此为/
cd /d/soft/boost_1_75_0
mkdir build
mkdir build/libs
./bootstrap.sh --with-libraries=all --with-toolset=gcc
#–with-libraries 指定编译哪些boost库,all的话就是全部编译,只想编译部分库的话就把库的名称写上,之间用 , 号分隔即可,可指定的库下面介绍
#–with-toolset 指定编译时使用哪种编译器,Linux下使用gcc即可,如果系统中安装了多个版本的gcc,在这里可以指定gcc的版本,比如–with-toolset=gcc-4.4
./b2 --build-dir="D:\soft\boost_1_75_0\build" --prefix="D:\soft\boost_1_75_0\build\libs" toolset=gcc install
#./b2 install --prefix="D:\soft\boost_1_70_0\build\libs" #不需要执行,上面的语句执行后已将头文件和动态库安装到了D:\soft\boost_1_75_0\build\libs里面
编译需要10-30分钟,编译完成后,最终的boost库安装在D:/soft/boost_1_75_0/install里面;
将D:\soft\boost_1_75_0\build\libs\include\boost-1_75目录拷贝到D:\Program Files\boost_1_75_0\mingw730\x64\include目录下;
将D:\soft\boost_1_75_0\build\libs\lib目录下的所有文件拷贝到D:\Program Files\boost_1_75_0\mingw730\x64\lib目录下;
(1)、解压libevent-2.1.12-stable.tar.gz到D:\soft,解压后路径为D:\soft\libevent-2.1.12-stable;
(2)、打开MSYS(双击C:\msys\1.0\msys.bat),执行如下命令:
export PATH=$PATH:/d/Qt/Qt5.12.10/Tools/mingw730_64/bin
cd /d/soft/libevent-2.1.12-stable #这里注意反斜杠,因为是模拟unix环境,因此为/
mkdir build
./configure –disable-openssl --prefix=D:/soft/libevent-2.1.12-stable/build
make
make install
注:编译成功后,在D:/soft/libevent-2.1.12-stable/build可以看到头文件、库文件和bin文件
(3)、将D:\soft\libevent-2.1.12-stable\build\include目录拷贝到D:\Program Files\libevent-2.1.12-stable\mingw730\x64\include;
(4)、将D:\soft\libevent-2.1.12-stable\build\bin目录拷贝到D:\Program Files\libevent-2.1.12-stable\mingw730\x64\bin;
(5)、将D:\soft\libevent-2.1.12-stable\build\lib目录下的所有文件拷贝到D:\Program Files\libevent-2.1.12-stable\mingw730\x64\lib目录下;
(1)、解压perl-5.24.0-mingw32.zip到C:\perl-5.24.0,环境变量path中增加C:\perl-5.24.0\bin;
(2)、解压openssl-1.1.1p.tar.gz到D:\soft,解压后路径D:\soft\openssl-1.1.1p;
(5)、打开MSYS(双击C:\msys\1.0\msys.bat),执行如下命令:
export PATH=$PATH:/d/Qt/Qt5.12.10/Tools/mingw730_64/bin #注意这里路径不能为D:/,必须修改为/D/,这里注意反斜杠,因为是模拟unix环境,因此为/
gcc -v #查看gcc环境变量设置是否成功
export PATH=$PATH:/c/perl-5.24.0/bin #注意这里路径不能为C:/,必须修改为/C/,这里注意反斜杠,因为是模拟unix环境,因此为/
per -v #查看perl环境变量设置是否成功
cd /d/soft/openssl-1.1.1p #这里注意反斜杠,因为是模拟unix环境,因此为/
mkdir build
perl Configure mingw64 no-shared no-asm --prefix=/d/soft/openssl-1.1.1p/build
如果编译32位的库,将命令中mingw64替换为mingw
上面语句执行完后,用记事本打开D:/soft/openssl-1.1.1p/Makefile文件,搜索PERL=,将PERL=C:/perl-5.24.0/bin/perl.exe修改为PERL=/c/perl-5.24.0/bin/perl.exe,如果不修改在后面执行make的时候会报找不到perl的错误
make
make install
(6)、将D:\soft\openssl-1.1.1p\build\include目录拷贝到D:\Program Files\openssl-1.1.1p\mingw730\x64\include;
将D:\soft\openssl-1.1.1p\build\bin目录拷贝到D:\Program Files\openssl-1.1.1p\mingw730\x64\bin;
将D:\soft\openssl-1.1.1p\build\share目录拷贝到D:\Program Files\openssl-1.1.1p\mingw730\x64\share;
将D:\soft\openssl-1.1.1p\build\lib目录下的所有文件拷贝到D:\Program Files\openssl-1.1.1p\mingw730\x64\lib目录下;
(1)、解压zlib-1.2.10.tar.gz到D:\soft,解压后路径为D:\soft\zlib-1.2.10;
(2)、打开MSYS(双击C:\msys\1.0\msys.bat),执行如下命令:
cd /d/soft/zlib-1.2.10 #这里注意反斜杠,因为是模拟unix环境,因此为/
将win32目录下的makefile.gcc复制到当前目录
mkdir build
mingw32-make -f makefile.gcc
(3)、编译后的文件在D:\soft\zlib-1.2.10目录下,将libz.a、libz.dll.a、zlib1.dll到D:\Program Files\zlib-1.2.10\mingw730\x64\lib;
(4)、将D:\soft\zlib-1.2.10目录下zlib.h、zutil.h、zconf.h文件拷贝到D:\Program Files\zlib-1.2.10\mingw730\x64\include目录下;
(1)、解压thrift-0.14.1.tar.gz到D:\soft\thrift-0.14.1,将libthrift.pro复制到D:\soft\thrift-0.14.1\lib\cpp;
(2)、将D:\soft\thrift-0.14.1\config.h文件拷贝到D:\soft\thrift-0.14.1\lib\cpp\src\thrift下,修改拷贝过去的config.h文件,将所有HAVE开头的宏都注释掉;
(3)、QtCreator打开libthrift.pro,编译器选择MinGW,分别编译Debug版本和Release版本,编译后的动态库在D:\soft\thrift-0.14.1\lib\cpp\debug和D:\soft\thrift-0.14.1\lib\cpp\release目录中;
(4)、将D:\soft\thrift-0.14.1\lib\cpp\src\thrift目录拷贝到D:\Program Files\thrift-0.14.1\mingw730\x64\include目录下;
注:实际只需要拷贝头文件即可,但因为thrift头文件和cpp文件都在该目录下,如果只拷贝头文件,需要一个一个去找,很麻烦,因此为了简便全部拷贝过去;
(5)、将debug和release目录下的.a文件和.dll文件都拷贝到D:\Program Files\thrift-0.14.1\mingw730\x64\lib目录下;
(1)、解压thrift-0.14.1.tar.gz到D:\soft\thrift-0.14.1,将compiler.pro复制到D:\soft\thrift-0.14.1\compiler\cpp;
(2)、QtCreator打开compiler.pro,编译器选择MinGW,编译Release版本,编译后的可执行程序在D:\soft\thrift-0.14.1\compiler\cpp\release目录中;
(3)、将release目录下的thrift.exe文件拷贝到D:\Program Files\thrift-0.14.1\mingw730\x64\bin目录下;