文章目录
- 安装前注意事项(避坑)
- ProtoBuf在Linux下的安装
- protoBuf 测试demo
安装前注意事项(避坑)
1.安装前,我们需要升级g++,使用较新的g++编译器。
2.在安装过程中,出现问题,可以选择安装其他版本,在加压文件下执行make uninstall
指令就能卸载,因为这是源码安装,不是源码安装可以使用yum remote
指令
3.安装完protobuf,如果在vscode在开发,那么可能会遇到如下图问题,cpp文件检测不到头文件,这是vscode的插件报的错,插件有时候不准确的,我们应该编译器是否有报错。
ProtoBuf在Linux下的安装
1、下载ProtoBuf
下载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
ProtoBuf下载地址:https://github.com/protocolbuffers/protobuf/releases
可以不⽤下载最新版本,课件以v21.11为例,具体的下载根据⾃⼰电脑情况选择。
在这⾥我们希望⽀持全部语⾔,所以选择protobuf-all-21.11.zip,右键将下载链接复制出来。
下载命令:
wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip
注意:使用wget
来下载可能会文件缺失,我们可以在windows下载,然后在xshell里使用rz
指令。
下载完成后,解压zip包:
unzipprotobuf-all-21.11.zip
解压完成后,会⽣成 protobuf-21.11
⽂件,进⼊⽂件:
cd protobuf-21.11
2、安装ProtoBuf
进⼊解压好的⽂件,执⾏以下命令:
# 第⼀步执⾏autogen.sh,但如果下载的是具体的某⼀⻔语⾔,不需要执⾏这⼀步。
./autogen.sh
# 第⼆步执⾏configure,有两种执⾏⽅式,任选其⼀即可,我使用第二种如下:
# 1、protobuf默认安装在 /usr/local ⽬录,lib、bin都是分散的
./configure
# 2、修改安装⽬录,统⼀安装在/usr/local/protobuf下
./configure --prefix=/usr/local/protobuf
再依次执⾏(避坑)
make // 执⾏15分钟左右
make check // 执⾏15分钟左右,选做,可以不执行该指令
sudo make install
如下图,执行make check
可能会失败,pb测试模块的问题,如果想解决可以安装如下链接操作https://blog.csdn.net/AlexWang30/article/details/90341172
到此,需要你回忆⼀下在执⾏configure时,如果当时选择了第⼀种执⾏⽅式,也就是./configure
,那么到这就可以正常使⽤protobuf了。如果选择了第⼆种执⾏⽅式,即修改了安装⽬录,那么还需要在/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/
最后⼀步,重新执⾏/etc/profile⽂件:
source /etc/profile
3、检查是否安装成功
输入 protoc --version
查看版本,有显示说明安装成功。
protoc --version
打印
libprotoc 3.21.11
protoBuf 测试demo
1.准备两个文件
test.cc 文件
#include <iostream>
#include "contacts.pb.h"
int main() {
std::string people_str;
{
// 对⼀个联系⼈的信息使⽤ PB 进⾏序列化,并将结果打印出来。
contacts::PeopleInfo people;
people.set_name("张珊");
people.set_age(20);
if (!people.SerializeToString(&people_str)) {
std::cerr << "序列化联系⼈失败!" << std::endl;
return -1;
}
std::cout << "序列化成功,结果:" << people_str << std::endl;
}
{
// 对序列化后的内容使⽤ PB 进⾏反序列,解析出联系⼈信息并打印出来。
contacts::PeopleInfo people;
if (!people.ParseFromString(people_str)) {
std::cerr << "反序列化联系⼈失败!" << std::endl;
return -1;
}
std::cout << "反序列化成功!" << std::endl
<< "姓名: " << people.name() << std::endl
<< "年龄: " << people.age() << std::endl;
}
return 0;
}
contacts.proto 文件
// 首行:语法指定行
syntax = "proto3";
package contacts;
// 定义联系人message
message PeopleInfo {
string name = 1; // 姓名
int32 age = 2; // 年龄
}
2.执行一下语句
protoc --cpp_out=. contacts.proto
g++ -o testPB test.cc contacts.pb.cc -lprotobuf -std=c++11
./testPB
# 打印如下说明成功了
[YYK@VM-8-7-centos fast_start]$ ./testPB
序列化成功,结果:
张珊
反序列化成功!
姓名: 张珊
年龄: 20