在linux下编译使用protobuf

编译源码包

从github:https://github.com/protocolbuffers/protobuf/tree/v2.5.0 下载源代码,此处我下载的是2.5.0版。
解压源码包,并进入如文件夹,如下图:
在linux下编译使用protobuf_第1张图片
执行配置编译:

$ ./configure --prefix=~/Google/protobuf-install/
$ make
$ make check
$ make install

源码编译后创建的文件夹:protobuf-install。
可以看到protobuf-install目录下有bin、include和lib目录。
在linux下编译使用protobuf_第2张图片
bin目录:
在linux下编译使用protobuf_第3张图片
include目录:

在linux下编译使用protobuf_第4张图片lib目录:
在linux下编译使用protobuf_第5张图片

编译测试工程

把include目录下的文件都按照该目录结构和lib/libprotobuf.a复制到所测试的目录中去。
准备用于演示的结构化数据是Content,它包含两个基本数据:id是一个整数类型int32的数据;str是一个字符串string;opt是一个可选的成员,即消息中可以不包含该成员。
myMessage.proto代码:

  package Im;
  message Content
  {
    required int32  id = 1;
    required string str = 2;
    optional int32  opt = 3;
  }

执行安装目录下bin目录中的protoc程序,将写好的proto 文件用Protobuf 编译器将该文件编译成目标语言。命令生成myMessage.pb.h和myMessage.pb.cc文件,如下图所示:
在这里插入图片描述生成的文件:
在linux下编译使用protobuf_第6张图片
测试生成的文件及结构化数据,该结构化数据由Im::Content类的对象表示,它提供一系列的get/set函数用来修改和读取结构化数据中的数据成员。
Writer.cpp代码:

#include 
#include "myMessage.pb.h"

int main()
{
    Im::Content msg1;
    msg1.set_id(10);
    msg1.set_str("hello world");
    std::cout << msg1.id() << '\n' << msg1.str() << std::endl;
    return 0;
}

先生成myMessage.pb.o文件,然后再编译Writer.cpp文件。输入如下命令进行编译:

g++ -c myMessage.pb.cc -I./include -L. -lprotobuf

生成myMessage.pb.o文件。
生成Writer可执行文件:

g++ -o Writer Writer.cpp myMessage.pb.o -I./include -L. -lprotobuf

运行可执行文件,验证输出是否正确:

./Writer

在这里插入图片描述

你可能感兴趣的:(Google工具,linux,protobuf)