protobuf在linux下载编译和使用

Posted 两片空白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了protobuf在linux下载编译和使用相关的知识,希望对你有一定的参考价值。

目录

protobuf的下载和编译:

编写proto文件来生成对应的.cc和.h文件:

测试

简单的序列化与反序列化

 将数据序列化成二进制并报存到文件中,再将文件中的二进制数据都上来


protobuf的下载和编译:

        到protobuf源码找到不同版本的压缩包,下载下来,并拉取到linux中。

        protobuf源码地址:https://github.com/protocolbuffers/protobuf

  • 查找下载不同版本的压缩包:

        进入官网点击tags,里面就有不同版本的protobuf的压缩包,选择版本,根据对应语言下载。

  • 编译protobuf,生成protoc编译器。
    • 使用tar命令解压:tar zxf protobuf-xxx
    • 进入解压后的文件夹:cd protobuf-xxx
    • 生成配置,主要是生成makefile:./configure
      • 如果没有configure文件,查找时否有autogen.sh文件,可以执行./autogen.sh,生成configure。
    • 编译:make
    • 安装到linux:make install
    • 更新动态链接为系统共享,否则时用protoc时会找不到动态库:ldconfig
  • 查看是否编译安装成功:

       执行protoc --version 显示出protobuf的版本,即编译成功。

编写proto文件来生成对应的.cc和.h文件:

编写的proto文件:

​编写生成.cc和.h脚本,使用protoc:

  • 导入目录设置

        使用--proto_path选项,后面跟需要解析的.proto文件所在目录。如果有多个目录,可以调用多次--proto_path选项。 -I 是 --proto_path的缩写。

  • 生成指定不同的代码

        上图中的--cpp_out选项,则是生成CPP相关代码。

--cpp_out :在目标目录DST_DIR中产生C++代码
--java_out :在目标目录DST_DIR中产生Java代码
--python_out :在目标目录 DST_DIR 中产生Python代码
--go_out :在目标目录 DST_DIR 中产生Go代码
--ruby_out:在目标目录 DST_DIR 中产生Ruby代码
--javanano_out:在目标目录DST_DIR中生成JavaNano
--objc_out:在目标目录DST_DIR中产生Object代码
--csharp_out:在目标目录DST_DIR中产生Object代码
--php_out:在目标目录DST_DIR中产生Object代码
  • 执行脚本

        在对应目录下生成CPP可以使用的文件。

测试

简单的序列化与反序列化

 编写一个简单的proto文件,并用protoc生成.cc和.h文件。

 编写测试代码:

 Makefile文件:

 执行:

注意:并非编码成字符串数据,string只是作为编码的容器。所以会有乱码出现。

遇到的问题:

  • 需要时用c++11标准编译

  • undefined reference to `protobuf::person::PersonInfo::~PersonInfo()

        这时因为引用了protoc生成的.h和.cc文件,需要将生成的.cc文件一起编译。

  • 需要告诉编译器使用的动态库名。

  • error while loading shared libraries: libprotobuf.so.32: cannot open

        这是因为找不到libprotobuf.so.32动态库,需要将动态库的路径加到LD_LIBRARY_PATH环境变量中。

 将数据序列化成二进制并报存到文件中,再将文件中的二进制数据都上来

fstream:对打开的文件可以进行读写操作。在构建对象时,可以打开文件,并选择打开方式读还是写,二进制方式还是文本方式。

从文件输入,并进行序列化:

 输出到文件函数:

 主函数:

makefile:

 运行:

 

 

 

以上是关于protobuf在linux下载编译和使用的主要内容,如果未能解决你的问题,请参考以下文章

protobuf在linux下载编译和使用

linux安装protobuf3.6.1编译安装

linux下安装protobuf及cmake编译

linux下编译protobuf(可以编译成pb.go)

Linux环境安装Protobuf

Protobuf使用--go和C#