笔者在做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
cd
到 cmake
文件夹下并创建一个 build
文件夹
cd .\protobuf\
mkdir build
cd build
至此可以通过 VS 提供的命令行工具使用 NMake
也可以通过 Visual Studio
进行编译
- NMake
没有NMake可以进入到 VS 提供的平台
然后 cd
到 build
目录
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/install
与 cmake
文件夹同级
我们复制debug
文件夹中的 lib
和 include
文件夹到我们项目所在的目录即可进行下面的cmakelists配置
其中的 bin
目录的 protoc.exe
可以添加到环境变量中就可以在 cmd
中去做生成 .cc
和 .h
文件的操作了
CMake 链接 protobuf
cmakelist中我们只需要将 include
和 lib
文件配置好即可
//...省略
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
至此问题顺利解决