win10+Qt5.12.10编译thrift

一、环境

操作系统: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

   (1)、解压perl-5.24.0-mingw32.zip到C:\perl-5.24.0;
   (2)、环境变量path中添加C:\perl-5.24.0\bin;

2、安装MSYS

   (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

3、MinGW编译boost

   (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目录下;

4、MinGW编译libevent

  (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目录下;

5、MinGW编译openssl

   (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目录下;

6、MinGW编译zlib

   (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目录下;

7、编译thrift动态库

   (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目录下;

8、编译thfit生成工具

   (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目录下;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
org.apache.thrift.transport.TTransportException是一个异常,它表示在使用Apache Thrift传输时发生了问题。这个异常通常是由于网络连接问题引起的。在引用和引用中,都提到了这个异常。其中,引用中的错误信息显示了一个SocketTimeoutException,这意味着在读取数据时发生了超时。而引用中的错误信息显示了一个GSS initiate failed异常,这可能是由于在与Kerberos进行身份验证时出现了问题导致的。 在处理这个异常时,可能还会遇到其他异常被抑制的情况。在引用中,提到了一个被抑制的SQLException异常,它发生在清理服务器资源时出错。 要解决org.apache.thrift.transport.TTransportException异常,可以考虑以下几个步骤: 1. 检查网络连接是否正常。确保网络连接稳定,并且没有任何阻塞或超时问题。 2. 检查Kerberos配置是否正确。确保在与Hive进行连接时,Kerberos身份验证过程能够正常进行。 3. 检查服务器资源清理过程是否出错。如果在关闭Hive连接时出现异常,可能需要检查关闭过程中是否有任何资源未正确释放。 以上是解决org.apache.thrift.transport.TTransportException异常的一些建议。具体的解决方法可能还需要根据具体情况进行调查和调试。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [线上问题排查系列-org.apache.thrift.transport.TTransportException:java.net.SocketTimeoutExceptio](https://blog.csdn.net/MichaelLi916/article/details/119458931)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [org.apache.thrift.transport.TTransportException: GSS initiate failed](https://blog.csdn.net/m0_37759590/article/details/131488324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值