作者:xsf9507 | 来源:互联网 | 2023-10-12 11:02
一.安装protobuf1.安装必要的工具yuminstall-yautoconfyuminstall-yautomakeyuminstall-ylibtoolyuminstal
一.安装protobuf
1.安装必要的工具
yum install -y autoconfyum install -y automakeyum install -y libtoolyum install -y curlyum install -y makeyum install -y g++yum install -y unzip
2.将protobuf压缩包下载在/usr/local/目录下
cd /usr/local/
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/protobuf-cpp-3.7.1.tar.gz
3.开始解压并安装
//解压
tar -xzvf protobuf-cpp-3.7.1.tar.gz//进入解压后的目录
cd protobuf-3.7.1//依次执行命令,完成安装
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig//删除压缩包
rm -f ../protobuf-cpp-3.7.1.tar.gz
4.测试是否安装成功
执行protoc --version,看一下是否能打印出版本号
二.用c++实现简单的例子
创建一个proto目录,用于保存.proto文件
mkdir protocd proto
创建一个User.proto文件
syntax = "proto2";message User
{optional uint64 id = 1;optional string nickName = 2;
}
写一个编译脚本gen.sh
proto_dir=./proto_src=./srctarget=mode#删掉生成文件,保证每次执行都是最新的
rm -rf src#创建一个目录,用来保存pb.h pb.cc pb.o 让代码看起来更干净一些
mkdir src#以c++的格式生成pb文件,*.pb.h *.pb.cc
protoc -I=$proto_dir --cpp_out=$proto_src $proto_dir/*.proto
执行脚本 sh gen.sh
打开src目录 cd /src
再到proto同目录级创建一个test目录
mkdir testcd test
编写一个main.cpp
#include
#include "../proto/src/User.pb.h"int main(int argc, char** argv)
{//创建一个User结构User user1;user1.set_id(100);user1.set_nickname("小明");//将结构序列化成stringstd::string str &#61; "";user1.SerializeToString(&str);std::cout <}
写一个简单的makefile文件
cc&#61;g&#43;&#43;#编译过程
cc_flags&#61;-std&#61;c&#43;&#43;11 \#链接过程&#xff0c;需要注意的是&#xff0c;prototbuf需要将protobuf的动态链接库引入&#xff0c;还需要libpthread.so库
ln_flags&#61;-L/usr/local/lib -lprotobuf \-lpthread \#所有的.o文件
obj&#61;main.o \../proto/src/User.pb.o \#目标文件
target&#61;process#依赖关系
$(target) : $(obj)$(cc) $(ln_flags) $(obj) -o $(target)%.o : %.cpp$(cc) $(cc_flags) -c $<-o $&#64;%.o: %.cc$(cc) $(cc_flags) -c $<-o $&#64;clean:rm -f $(obj) $(target)
写一个简单的run.sh脚本
ulimit -c 100000 #加上这一行有崩溃的时候会产生core文件&#xff0c;感兴趣的可以了解一下
export LD_LIBRARY_PATH&#61;/usr/local/lib/: #需要将protobuf的库引入
./process
执行make命令&#xff0c;产生process可执行文件
运行run.sh脚本 sh run.sh 查看结果
6.总结
小编写这个博客主要是想给刚接触protobuf的同学做一个简单的引导&#xff0c;protobuf运用广泛&#xff0c;目前各大公司的通信协议使用的都是protobuf&#xff0c;感兴趣的同学可以自己试着学一下。刚接触的时候&#xff0c;难免会碰到或多或少的坑&#xff0c;希望我这篇文章可以给同学们带来一点帮助。