Windows MinGW编译并安装Protobuf 25.3

编译Protobuf前需要先编译zlib,上官网(https://zlib.net/)下载zlib源码进行编译

一、编译Zlib

  1. 设置环境变量,这里就使用Qt的编译环境
set path=%path%;D:\Qt\Tools\mingw810_64\bin;D:\Qt\Tools\CMake_64\bin;
  1. 解压源码文件并创建临时编译目录build目录,进入build目录执行cmake。这里我指定了编译器,因为默认编译器存在冲突,你可以不必指定CMAKE_CXX_COMPILERCMAKE_C_COMPILER字段。CMAKE_INSTALL_PREFIX字段表示安装路径。
cmake ../ -G"MinGW Makefiles" -DCMAKE_CXX_COMPILER=D:/Qt/Tools/mingw810_64/bin/g++.exe -DCMAKE_C_COMPILER=D:/Qt/Tools/mingw810_64/bin/gcc.exe -DCMAKE_INSTALL_PREFIX=D:\zlib-1.3.1
  1. 编译并安装
mingw32-make -j8 install

二、编译protobuf

  1. 下载protobuf(https://github.com/protocolbuffers/protobuf,官网:https://protobuf.dev/),下载时请注意third_party里面有很多第三方依赖需要一并下载下来

  2. 解压源码并创建临时编译目录build,进入build目录执行cmake。protobuf_BUILD_TESTS字段是否编译测试项,可关闭。ABSL_PROPAGATE_CXX_STD字段建议打开。ZLIB_INCLUDE_DIR字段指定zlib头文件搜索目录,ZLIB_LIBRARY字段指示zlib库,请注意这里必须使用正斜线,不能使用反斜线

cmake ../ -G"MinGW Makefiles" -DCMAKE_CXX_COMPILER=D:/Qt/Tools/mingw810_64/bin/g++.exe -DCMAKE_C_COMPILER=D:/Qt/Tools/mingw810_64/bin/gcc.exe -DCMAKE_INSTALL_PREFIX=D:\protobuf-25.3 -Dprotobuf_BUILD_TESTS=OFF -DABSL_PROPAGATE_CXX_STD=ON -DZLIB_INCLUDE_DIR=D:\zlib-1.3.1\include -DZLIB_LIBRARY=D:/zlib-1.3.1/lib/libzlibstatic.a
  1. 编译并安装
mingw32-make -j8 install

三、测试使用protobuf

  1. 新建文件Person.proto,内容如下:
syntax = "proto3";

message Person
{
    int32 id = 1;
    bytes name = 2;
    bytes sex = 3;
    int32 age = 4;
}
  1. 设置环境变量,并执行protoc指令解析生成c++源码文件。执行成功会生成Person.pb.hPerson.pb.cc两个文件。
set path=%path%;D:\Qt\Tools\mingw810_64\bin;D:\protobuf-25.3\bin;
protoc ./Person.proto --cpp_out=./
  1. 创建cmake工程,CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.14)

project(untitled10 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# MinGW 8.1存在BUG,C++17无法编译通过,指定C++14版本
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(ZLIB_INCLUDE_DIR D:/zlib-1.3.1/include)
set(ZLIB_LIBRARY D:/zlib-1.3.1/lib/libzlibstatic.a)
set(absl_DIR D:/protobuf-25.3/lib/cmake/absl)
set(utf8_range_DIR D:/protobuf-25.3/lib/cmake/utf8_range)
set(Protobuf_DIR D:/protobuf-25.3/lib/cmake/protobuf)

find_package(Qt5 REQUIRED COMPONENTS Core)

#必须指定CONFIG属性
find_package(Protobuf REQUIRED CONFIG)

add_executable(untitled10
    main.cxx
    Person.pb.h
    Person.pb.cc
)
target_link_libraries(untitled10 Qt5::Core protobuf::libprotobuf)

main.cxx如下:

#include <QCoreApplication>
#include <QDebug>
#include <google/protobuf/util/json_util.h>
#include <google/protobuf/message.h>
#include "Person.pb.h"

int main(int argc, char *argv[])
{
    Person p;
    p.set_id(12);
    p.set_name("测试数据");
    p.set_sex("男");
    p.set_age(13);
    // p.clear_id();

    std::string str;
    google::protobuf::util::JsonPrintOptions options;
    options.add_whitespace = true;
    auto status = google::protobuf::util::MessageToJsonString(p, &str, options);
    qDebug() << status.ok() << Qt::endl << str.data();
}

  1. 编译并执行输出如下内容:
true 
{
 "id": 12,
 "name": "5rWL6K+V5pWw5o2u",
 "sex": "55S3",
 "age": 13
}
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值