一、在 Windows 下的安装

如果不仅仅是为了就是让 proto 文件转化成 .h/.cc 文件的,而是还要进行开发的,请直接跳转到:

4、VS 2019 上的开发

1、下载 ProtoBuf 编译器

下载地址:https://github.com/protocolbuffers/protobuf/releases可以不用下载最新版本,下面以 v21.11 为例,具体的下载根据自己电脑情况选择。

文件名 大小 发布日期
protoc-21.11-osx-x86_64.zip 1.42MB Dec 8, 2022
protoc-21.11-win32.zip 2.2MB Dec 8, 2022
protoc-21.11-win64.zip 2.17MB Dec 8, 2022

下载之后将压缩包解压到本地目录下。解压后的文件内包含 bin、include 文件,以及一个 readme.txt。

名称 类型
bin 文件夹
include 文件夹
readme.txt 文本文档

2、配置环境变量

把解压后文件中的 bin 目录配置到系统环境变量的 Path 中去。

环境变量配置步骤:

  1. 打开环境变量设置窗口(可通过 “此电脑” 右键 “属性”→“高级系统设置”→“环境变量” 打开)。
  2. 在 “系统变量” 中找到 Path 变量,点击 “编辑”。
  3. 点击 “新建”,将解压后 bin 目录的路径(例如:D:\protoc-21.11-win64\bin)添加进去。
  4. 点击 “确定” 保存配置。

3、检查是否配置成功

打开 cmd,输入以下命令:

protoc --version

若显示版本信息(如:libprotoc 3.21.11),说明配置成功。

Microsoft Windows [版本 10.0.19045.2604]
(c) Microsoft Corporation。保留所有权利。

C:\Users>protoc --version
libprotoc 3.21.11

C:\Users>

走到这里,恭喜你 ProtoBuf 安装成功!!!

4、VS 2019 上的开发

如果针对 Windows 上的开发,这还是远远不够的:

你下载的 protoc-21.11-win64.zip:
┌─────────────────────────┐
│     protoc.exe          │ ← 编译器工具
│     + 基本的 include/   │ ← 仅包含 .proto 文件
└─────────────────────────┘
功能:proto → 代码转换器
用途:只用于代码生成

完整的 C++ 开发包:
┌─────────────────────────┐
│     protoc.exe          │ ← 编译器工具
│     + 完整 include/     │ ← 所有 .h 头文件
│     + lib/              │ ← 静态库/动态库
│     + bin/              │ ← 运行时 DLL
└─────────────────────────┘
功能:完整的开发环境
用途:代码生成 + 编译链接

下面我们来通过 VS2019 的演示:(上面的可以不需要了,后面生成的 exe 就按照上面进行操作)

我们可以通过 Release 页面找对应分支

  1. 访问 Protocol Buffers Releases

  2. 找到 3.21.11 版本

  3. 查看发布信息中的 Tag

  • 版本 3.21.11 → Tag: v3.21.11

下面我直接使用 git 操作了:(自己在自己安排好的目录下右击打开命令行进行 git)

# 1. 克隆整个仓库
git clone https://github.com/protocolbuffers/protobuf.git

# 2. 切换到 3.21.11 版本
cd protobuf
git checkout v3.21.11

# 或一步到位克隆指定版本
git clone --branch v3.21.11 https://github.com/protocolbuffers/protobuf.git protobuf-3.21.11
PS C:\lfz\galpBimsTools\third> git clone --branch v3.21.11 https://github.com/protocolbuffers/protobuf.git protobuf-3.21.11
Cloning into 'protobuf-3.21.11'...
remote: Enumerating objects: 238033, done.
remote: Counting objects: 100% (330/330), done.
remote: Compressing objects: 100% (150/150), done.
remote: Total 238033 (delta 201), reused 182 (delta 179), pack-reused 237703 (from 2)
Receiving objects: 100% (238033/238033), 196.88 MiB | 19.38 MiB/s, done.
Resolving deltas: 100% (172157/172157), done.
warning: refs/tags/v3.21.11 cd0c5d248408ea428e2e560133ce78838ac8a27a is not a commit!
Note: switching to 'aea4a275e28329f648e046469c095eef74254bb2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

Updating files: 100% (2250/2250), done.

🕐.打开 cmake ,然后选择 protobuf-v3.21.11 目录中的 cmake 文件夹:

🕐.单击 configure 按钮,在打开界面中配置生成器及平台:

如果报错而且 protobuf 源码是通过 git clone 下载的,进入 protobuf 根目录(protobuf-3.21.11),执行命令拉取子模块:

# 进入 protobuf 根目录
cd C:/lfz/galpBimsTools/third/protobuf-3.21.11

# 初始化并拉取所有子模块(包括 googletest)
git submodule update --init --recursive

执行完成后,third_party/googletest 目录会被创建并填充内容,重新运行 CMake 即可。

🕐.取消 protobuf_BUILD_TESTS 选项,若要生成动态库需要选择 protobuf_BUILD_SHARED_LIBS:

🕐.单击 Generate 按钮生成 sln 工程目录:

上面生成 sln 工程文件了之后,下面我们来编译 sln 工程

🕐.用 VS2019 打开生成的 sln 项目文件:

🕐.右键解决方案分别生成 Debug 和 Release 版的库文件:

为了使用更方便,我们需要整理一下生成的结果

🕐.我们在 protobuf-3.21.11 下建立一个 protobuf-x64 目录,在这个目录下进行操作

🕐.新建 bin 文件夹,把生成的 libprotobufd.dll、libprotobuf-lited.dll、libprotocd.dll 三个动态库文件放入文件夹

🕐.新建 lib 文件夹,把生成的 libprotobufd.lib、libprotobuf-lited.lib、libprotocd.lib三个库文件放入文件夹

🕐.新建 include 文件夹,把 protobuf-v3.21.11 目录中的 src\google 文件夹拷贝放入

🕐.新建 tools 文件夹,把 protoc.exe、libprotobufd.dll、libprotocd.dll 三个文件放入,用于编译生成 c++ 文件

最终生成的完整目录如下,在使用时把 protobuf-x86 放在对应的工程路径下即可:

为了不让大家产生更多疑问,针对 Windows 下 VS2019 的代码开发,我们演示一遍(还有这个protoc.exe 所在路径可以放在环境变量中,一样通过 version 测验)

①.项目属性配置

C/C++中:在附加包含目录中配置 include 路径

链接器中:在附加库目录中配置 lib 路径

在附加依赖项中配置 libprotobufd.lib

在项目中配置「DLL 输出目录」(自动复制,推荐开发阶段)(也可以配置到自己的环境变量中)

在 VS 项目中设置,编译时自动将 Protobuf 的 DLL 复制到你的程序输出目录:

  • 右键项目 →「属性」→「配置属性」→「生成事件」→「后期生成事件」
  • 在「命令行」中添加复制命令(替换为你的实际路径):
    copy /Y "C:\xxx\protobuf-3.21.11\build\bin\Debug\libprotobufd.dll" "$(OutDir)"
    
  • 这样每次编译项目时,DLL 会自动复制到 exe 所在的 Debug 目录,无需手动操作。

②.编写测试用的 .proto 文件
③.生成对应的 C++ 文件

为方便使用可在同目录编写一个 generate.bat 文件

generate.bat

cd /d %~dp0
protoc.exe *.proto --cpp_out=.
pause

双击 generate.bat 运行即可生成 .h 和 .cc 文件

把生成的文件添加到项目中,并且在生成的 .h 文件最开头添加:

#define PROTOBUF_USE_DLLS

否则编译会出错!

二、ProtoBuf 在 Linux 下的安装

1、下载 ProtoBuf

(1)安装依赖库

下载 ProtoBuf 前一定要安装依赖库:autoconf automake libtool curl make g++ unzip。如未安装,根据系统类型执行以下安装命令:

  • Ubuntu 用户:
sudo apt-get install autoconf automake libtool curl make g++ unzip -y
  • CentOS 用户:
sudo yum install autoconf automake libtool curl make gcc-c++ unzip
(2)下载 ProtoBuf 安装包

下载地址:https://github.com/protocolbuffers/protobuf/releases可以不用下载最新版本,课件以 v21.11 为例,具体的下载根据自己电脑情况选择。

文件名 大小 发布日期 适用场景
protobuf-all-21.11.tar.gz 7.31MB Dec 10, 2022 支持全部语言
protobuf-all-21.11.zip 9.29MB Dec 8, 2022 支持全部语言
protobuf-cpp-3.21.11.tar.gz 4.63MB Dec 10, 2022 C++ 语言
protobuf-cpp-3.21.11.zip 5.62MB Dec 8, 2022 C++ 语言
protobuf-csharp-3.21.11.tar.gz 5.35MB Dec 10, 2022 C# 语言
protobuf-csharp-3.21.11.zip 6.58MB Dec 8, 2022 C# 语言
protobuf-java-3.21.11.tar.gz 5.32MB Dec 10, 2022 Java 语言
protobuf-java-3.21.11.zip 6.67MB Dec 8, 2022 Java 语言
protobuf-objectivec-3.21.11.tar.gz 4.99MB Dec 10, 2022 Objective-C 语言
protobuf-objectivec-3.21.11.zip 6.12MB Dec 8, 2022 Objective-C 语言
protobuf-php-3.21.11.tar.gz 4.94MB Dec 10, 2022 PHP 语言
protobuf-php-3.21.11.zip 6.05MB Dec 8, 2022 PHP 语言
protobuf-python-4.21.11.tar.gz 4.99MB Dec 10, 2022 Python 语言
protobuf-python-4.21.11.zip 6.05MB Dec 8, 2022 Python 语言
protobuf-ruby-3.21.11.tar.gz 4.87MB Dec 10, 2022 Ruby 语言
protobuf-ruby-3.21.11.zip 5.91MB Dec 8, 2022 Ruby 语言
选择说明:
  • 若要在 C++ 下使用 ProtoBuf,选择 cpp 相关压缩包;
  • 若要在 Java 下使用 ProtoBuf,选择 java 相关压缩包;
  • 其他语言选择对应的链接即可;
  • 希望支持全部语言,选择 all 相关压缩包。
下载与解压操作:

这里以支持全部语言为例,选择 protobuf-all-21.11.zip,执行以下命令:

下载安装包:

wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip

解压 zip 包:

unzip protobuf-all-21.11.zip

进入解压后的目录:

cd protobuf-21.11

解压后目录内容如下:

lfz@139-159-150-152:~/install/protobuf-21.11$ ls
CMakeLists.txt          CONTRIBUTING.md  examples        Makefile.am    protobuf.bzl          protobuf_version.bzl  third_party
CONTRIBUTORS.txt        depcomp          generate_descriptor_proto.sh  m4             protobuf_deps.bzl     README.md             util
build_files_updated_unittest.sh  editors          global.json     missing        protobuf-lite.pc.in   ruby                   update_file_lists.sh
config.sub              conformance      install-sh      objectivec     protobuf.pc.in        src                    util
configure               csharp           java            php            protobuf.podspec      test-driver           WORKSPACE
configure.ac            depcomp          ltmain.sh       python         protobuf_release.bzl  third_party           protobuf_deps.bzl
LICENSE                 docs             maven_install.json  protobuf_version.bzl  protobuf-test         test-driver           update_file_lists.sh

2、安装 ProtoBuf

进入解压好的文件目录,执行以下命令:

第一步:执行 autogen.sh(仅全部语言版本需要,单一语言版本无需执行)
./autogen.sh
第二步:执行 configure(二选一)

默认安装(安装在 /usr/local 目录,lib、bin 分散):

./configure

自定义安装目录(统一安装在 /usr/local/protobuf 下):

./configure --prefix=/usr/local/protobuf
第三步:依次执行以下命令
# 执行测试(约15分钟左右,若报错可参考下方解决方法)
make check

# 执行安装
sudo make install
make check 报错处理:

部分用户可能在执行 make check 时出现错误,示例如下:

make[2]: Leaving directory /home/hzh/protobuf-21.11/src
make check-TESTS
make[2]: Entering directory '/home/hzh/protobuf-21.11/src'
make[3]: Entering directory '/home/hzh/protobuf-21.11/src'
FAIL: protobuf-test
PASS: protobuf-lazy-descriptor-test
PASS: protobuf-lite-test
PASS: google/protobuf/compiler/zip_output_unittest.sh
PASS: google/protobuf/io/gzip_stream_unittest.sh
PASS: protobuf-lite-arena-test
PASS: no-warning-test
make[4]: Entering directory '/home/hzh/protobuf-21.11/src'
make[4]: Nothing to be done for 'all'.
make[4]: Leaving directory '/home/hzh/protobuf-21.11/src'
Testsuite summary for Protocol Buffers 3.21.11
# TOTAL: 7
# PASS: 6
# XFAIL: 0
# SKIP: 0
# FAIL: 1
# XPASS: 0
# ERROR: 0
See src/test-suite.log
Please report to protobuf@googlegroups.com
make[3]: *** [test-suite.log] Error 1
make[3]: Leaving directory '/home/hzh/protobuf-21.11/src'
make[2]: *** [check-TESTS] Error 2
报错原因及解决方法:

报错原因是 test 模块的测试用例对服务器环境要求严格,需要增大 swap 分区。具体操作参考:https://blog.csdn.net/AlexWang30/article/details/90341172建议:先扩大 3G swap 分区,再执行 make check;若仍报错,扩大到 5G 后重新执行。

成功标志:

执行 make check 后,显示以下内容即测试通过,可继续执行 sudo make install:

PASS: protobuf-test
PASS: protobuf-lazy-descriptor-test
PASS: protobuf-lite-test
PASS: google/protobuf/compiler/zip_output_unittest.sh
PASS: google/protobuf/io/gzip_stream_unittest.sh
PASS: protobuf-lite-arena-test
PASS: no-warning-test
Testsuite summary for Protocol Buffers 3.21.11
# TOTAL: 7
# PASS: 7
# XFAIL: 0
# SKIP: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
make[3]: Leaving directory '/home/hyb/protobuf-3.21.11/src'
make[2]: Leaving directory '/home/hyb/protobuf-3.21.11/src'
make[1]: Leaving directory '/home/hyb/protobuf-3.21.11/src'
第四步:配置环境变量(仅自定义安装目录时需要)

若执行 configure 时选择了自定义安装目录(./configure --prefix=/usr/local/protobuf),需在 /etc/profile 中添加以下内容:

编辑 /etc/profile 文件:

sudo vim /etc/profile

在文件末尾添加以下内容:

# 动态库搜索路径:程序加载运行期间查找动态链接库时指定除系统默认路径之外的其他路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/

# 静态库搜索路径:程序编译期间查找动态链接库时指定查找共享库的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/

# 执行程序搜索路径
export PATH=$PATH:/usr/local/protobuf/bin/

# C程序头文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/

# C++程序头文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/

# pkg-config 路径
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

保存并退出编辑(vim 中输入 :wq 回车)。

重新执行 /etc/profile 文件,使配置生效:

source /etc/profile

3、检查是否安装成功

输入以下命令查看版本,有显示说明安装成功:

protoc --version

示例:

hyb@139-159-150-152:~/install/protobuf-21.11$ protoc --version
libprotoc 3.21.11

走到这里,恭喜你 ProtoBuf 安装成功!!!

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐