Protobuf如何集成到C++环境中(QT5)

2 篇文章 0 订阅

前言

上一篇讲了如何用vs2019的编译工具msvc来编译生成protobuf的静态库,并在vs2019的工程里配置和使用。见Protobuf如何集成到C++环境中(VS2019)
但如果想在windows上使用 QT+MinGW的方式来使用protobuf的库,用msvc编译的库就没有用了。

安装MYSYS2

参考我上一篇博客用MSYS2安装mingw。安装MYSYS2后,需要安装一些必要的库。

  • autoconf
  • automake
  • libtool
  • make
  • g++
  • unzip
    这些库是官方要求安装的库,但通过安装base-devel 的子包autoconf、autogen、automake1.16、libtool、make、pkgconf。
    和mingw-w64-x86_64-toolchain的子包mingw-w64-x86_64-gcc 、mingw-w64-x86_64-gdb、mingw-w64-x86_64-make、mingw-w64-x86_64-pkgconf也是可以得到这些库的。

当然也可以用pacman -Q [包名],来查询是否有这些库。

源码编译

安装完所需要的的依赖后,就可以编译了,先需要打开MSYS2 MinGW 64-bit,只有这个才有gcc等工具。
先把源文件代码copy进mysy2的home目录下,路径如D:\msys64\home\用户名。

不带zlib库

依次输入以下命令:

cd protobuf
./configure --prefix=/usr --with-zlib=no
make
make install

安装完成后,protobuf的lib文件会安装在/usr/lib目录下,google文件夹会安装在 /usr/include目录下,protoc.exelibprotobuf-17.dlllibprotobuf-lite-17.dlllibprotoc-17.dll文件会安装在/usr/bin目录下。这种安装方式是跟linux系统是一样的。

最后需要将/usr/bin的windows目录,例如D:\msys64\usr\bin添加到系统环境变量中。不然会提示"找不到libprotobuf-17.dll"的错误。

带zlib库

上面说的是不带zlib的,默认的./configure 文件是带zlib的编译的。
依次输入以下命令(在重新make之前,先make clean):

cd protobuf
./configure --prefix=/usr
make
make install

如果想使用带zlib的库,需要先安装vcpkg工具。
vcpkg的安装方法参考vcpkg官方github仓库。简单说一下步骤就是:

  1. 在C盘新建一个C:\dev\目录,cd进C:\dev\目录(文件名最好用dev和src)
  2. 输入git clone https://github.com/microsoft/vcpkg,把仓库clone下来
  3. cd进C:\dev\vcpkg目录,输入.\bootstrap-vcpkg.bat,运行安装脚本

安装好vcpkg后,安装zlib包。

.\vcpkg.exe install protobuf[zlib] protobuf[zlib]:x64-windows

vcpkg list命令,可查看所有已安装的包
vcpkg remove [包名]命令,可卸载已安装的包

vcpkg安装的包,会在C:\dev\vcpkg\packages目录下,我们需要将zlib的bin目录也添加进环境变量,不然会报"找不到zlib1.dll错误",例如C:\dev\vcpkg\packages\zlib_x64-windows\bin

QT链接库

QT使用protobuf的步骤:

  1. 新建QT工程,编译器选择MinGW 64-bit,类型选择Release
  2. 利用protoc.exe和自定义的.proto文件生成.cc文件和.h文件,并将.cc和.h添加进QT工程
  3. 在.pro文件后添加如下qmake代码,来链接protobuf动态库
LIBS += -LD:/msys64/usr/lib/ -lprotobuf
LIBS += -LD:/msys64/usr/lib/ -lprotobuf-lite
LIBS += -LD:/msys64/usr/lib/ -lprotoc

INCLUDEPATH += D:/msys64/usr/include
DEPENDPATH += D:/msys64/usr/include


PRE_TARGETDEPS += D:/msys64/usr/lib/libprotobuf.a
PRE_TARGETDEPS += D:/msys64/usr/lib/libprotobuf-lite.a
PRE_TARGETDEPS += D:/msys64/usr/lib/libprotoc.a

QT的测试代码与我上一篇的博客Protobuf如何集成到C++环境中(VS2019)类似。
如果出现运行,程序退出的情况,或者报缺dll文件,可能是环境变量没起作用,重启下基本解决问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值