当前位置:   article > 正文

Linux下protobuf的简单使用_protoc生成cpp和h文件

protoc生成cpp和h文件

1. 创建proto文件

touch test.proto

2. 往proto文件添加内容

syntax = "proto3";

message Person
{
    string name = 1;
    int32 age = 18;
}

第一行表示使用proto3语法进行编译

第2-6行表示结构体内容。 

3. 使用protoc对test.proto编译

protoc --cpp_out=. test.proto

其中--cpp_out表示编译后的cpp和h文件的输出目录,如果是其他语言,只需要改变cpp即可;

.表示当前目录;

后面的test.proto表示编译的源文件

整个编译语法是这样子的:

  1. protoc -I$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/test.proto
  2. //比如说,在当前目录下,有一个test.proto文件,使用protoc编译之后
  3. //将cpp文件和h文件放在当前目录下
  4. protoc -I. --cpp_out=. ./test.proto

编译成功之后,在当前目录下就会存在.cpp文件和.h文件。

4. 创建CPP文件简单使用编译好的.h文件

touch verify.cc

往里面添加内容:

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <string>
  4. #include "test.pb.h"
  5. using namespace std;
  6. int main()
  7. {
  8. Person person;
  9. person.set_name("lisi");
  10. person.set_age(30);
  11. string data;
  12. if (person.SerializeToString(&data))//注意SerializeToString函数首字母全大写
  13. {
  14. cout << "Serialized data : " << data << endl;
  15. }
  16. return 0;
  17. }

5. 编译verify.cc

g++ verify.cc -o verify

你会发现,报错了,错误信息如下:

/usr/bin/ld: /tmp/cccz9klh.o: in function `main':
/home/ubuntu/CodePractice/linux_protobuf/test.cc:14: undefined reference to `google::protobuf::MessageLite::SerializeToString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) const'
/usr/bin/ld: /home/ubuntu/CodePractice/linux_protobuf/test.cc:19: undefined reference to `Person::~Person()'
/usr/bin/ld: /home/ubuntu/CodePractice/linux_protobuf/test.cc:19: undefined reference to `Person::~Person()'
/usr/bin/ld: /tmp/cccz9klh.o: in function `google::protobuf::internal::ArenaStringPtr::Set(char const*, google::protobuf::Arena*)':
/usr/local/include/google/protobuf/arenastring.h:402: undefined reference to `google::protobuf::internal::ArenaStringPtr::Set(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, google::protobuf::Arena*)'
/usr/bin/ld: /tmp/cccz9klh.o: in function `Person::Person()':
/home/ubuntu/CodePractice/linux_protobuf/test.pb.h:59: undefined reference to `Person::Person(google::protobuf::Arena*, bool)'
collect2: error: ld returned 1 exit status

 解决方法:

g++ verify.cc test.pb.cc -o app -lprotobuf -std=c++11 -lpthread

 6. 运行app

  1. ./app
  2. //输出
  3. //lisi

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/1008976
推荐阅读
相关标签
  

闽ICP备14008679号