步骤
- 下载ProtoBuf源文件
- 准备编译环境
- 编译并配置环境变量
- ProtoBuf Demo编码
下载
github ProtoBuf,这里选择cpp
版本。
编译安装ProtoBuf
编译安装
./configure --disable-shared x86_64-apple-darwin17.7.0 --prefix=/Users/paulxu/Jumei/compose/PicsToPdf/gcc/protobuf-build/
## make clean # optional
make -j2 # 双倍编译
make install
配置环境
export PKG_CONFIG_PATH="/Users/paulxu/Jumei/compose/PicsToPdf/gcc/protobuf-3.7.1"
ProtoBuf C++ Demo编码
编译
g++ `pkg-config --cflags --libs protobuf` -std=c++11 -v ./lm.helloworld.pb.cc ./proto_test1.cpp -o proto_test1.o
使用
编写一个模版
syntax = "proto3";
package Demo;
message Files {
repeated File file = 1;
}
message File {
string fileName = 1;
uint32 fileSize = 2;
string ext = 3;
bytes data = 4;
}
编译模版
protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
常见问题
- Please use ‘syntax = “proto2”;’ or ‘syntax = “proto3”;’ to specify a syntax version.
方案:这个是*.proto
文件语法问题,如果你下载ProtoBuf3.*
版本,为了和ProtoBuf2.*
区别开来,就会有这样的提示,要求你在第一行加上提示信息就行了。
- 编译Demo过程中有很多语法检查报错。
方案:新版本ProtoBuf
基于C++11
,使用了新特性以及语法,所以在编译测试代码时,需要加上-std=c++11
就行了。
- undefined reference to `google::protobuf::Message::SerializeToOstream(std::ostream*) const’
方案:这个是包include路径配置不完整,需要完善。
- mac ld: symbol(s) not found for architecture x86_64
方案:编译时,需要把 *.pb.c
就是模版文件生成的目标文件带上。