windows下 Qt + CMake + protobuf 配置

本文讲述了作者在使用Qt+Clion+protobuf-21.12项目时遇到链接protobuf库的undefined错误,通过CSDN和StackOverflow找到答案,最终通过Vcpkg解决依赖问题,确保CMakeLists配置正确以顺利编译项目。
摘要由CSDN通过智能技术生成

笔者在做Qt + Clion + protobuf 项目时遇到的一些问题,结合CSDN 以及 stackoverflow 相关答案最终解决在链接 protobuf 时出现的 undefine google::xxx 问题

Protobuf相关库的编译

  • Protobuf从21.12版本开始增加了一些第三方的库,本次经验分享基于protobuf-21.12

从protobuf官网下载cpp源码
https://github.com/protocolbuffers/protobuf/releases

下载压缩包或者通过 git 拉取都是可以的,这里笔者采用下载压缩包,但附上git 拉取的代码:

git clone -b v21.12 https://github.com/protocolbuffers/protobuf.git

cdcmake 文件夹下并创建一个 build 文件夹

 cd .\protobuf\
 mkdir build
 cd build

至此可以通过 VS 提供的命令行工具使用 NMake 也可以通过 Visual Studio 进行编译

  • NMake

没有NMake可以进入到 VS 提供的平台
选择自己的平台
然后 cdbuild 目录

cmake -G "NMake Makefiles" ^
     -DCMAKE_BUILD_TYPE=DEBUG ^
     -DCMAKE_INSTALL_PREFIX=../../install/debug ^
     -Dprotobuf_BUILD_SHARED_LIBS=ON ^
     -Dprotobuf_WITH_ZLIB=OFF ^
     -Dprotobuf_BUILD_TESTS=OFF ^
     ../..

上述生成的是 Debug ,如果需要 Release 版本则可以将 -DCMAKE_BUILD_TYPE=DEBUG 改为-DCMAKE_BUILD_TYPE=Release

随后就可以输入

nmake & nmake install

这样会生成一个 install 文件夹在 protobuf/installcmake 文件夹同级

我们复制debug文件夹中的 libinclude 文件夹到我们项目所在的目录即可进行下面的cmakelists配置

其中的 bin 目录的 protoc.exe 可以添加到环境变量中就可以在 cmd 中去做生成 .cc.h 文件的操作了

CMake 链接 protobuf

cmakelist中我们只需要将 includelib 文件配置好即可

//...省略
include_directories(xxx/to/include)

add_executable(yyy ${SRC})

target_link_directories(xxx/to/lib)
target_link_libraries(yyy
	libprotobufd
	libprotobuf-lited
)
//...省略

至此配置完成!

但是!!!我在这里遇到了很离奇的错误,在测试编译时会报~XXX()函数找不到
未定义析构函数???

没错就是析构函数找不到,我尝试了很多方法比如换个工具集去做编译什么的!但都以失败告终…

最后只能使用 Vcpkg 来解决 protobuf 的依赖问题

Vcpkg install protobuf:x64-windows

如果没有 Vcpkg 可以去网上找找教程,碍于篇幅就不去做分享了

最后 CMakeLists.txt :

find_package(protobuf CONFIG REQUIRED)

# protobuf
include_directories(${Protobuf_INCLUDE_DIRS})

add_executabel(yyy ${SRC})

target_link_libraries(yyy PRIVATE
	protobuf::libprotobufd
	protobuf::libprotobuf-lited
)

最后比较重要的一点,因为是通过 vcpkg 做了依赖解决,那么 Clion 这里的Toolchain以及CMake选项就得使用VS提供的

笔者项目是基于 QT 那么就需要将原来的 mingw_64 换为了 msvc2019_64

至此问题顺利解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值