安装编译
按照Readme来就行,我安装在了默认的/usr/local路径,所以需要在环境变量中加入路径。export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib
export PATH=$PATH:/usr/local/bin
查看版本
protoc --version
proto文件写法
文件名为Mymessage.proto
syntax = "proto3";
package Im;
message Content{
    int32   id = 1;
    string  name = 2;
    int32   passwd = 12;
} 编译成C++文件
protoc ./Mymessage.proto --cpp_out=/home/ywq/test-probuf
生成Mymessage.pb.cc和Mymessage.pb.h两个文件
报错Missing input file.
原因:如果proto描述文件在当前目录,要以"./"开始。
解析与序列化
//序列化消息,将存储字节的以string方式输出。注意字节是二进制,而非文本; bool SerializeToString(string* output); bool ParseFromString(const string& data); //解析给定的string bool SerializeToOstream(ostream* output); //写消息给定的c++ ostream中 bool ParseFromIstream(istream* input); //从给定的c++ istream中解析出消息
makefile文件写法
坑很多,如果没有加-std=c++11会编译失败;没有-lpthread编译可以成功,但是运行时会失败。
INC=/usr/local/lib
LIB=/usr/local/lib
lib=protobuf
all:Writer Reader
Writer.o: Writer.cpp
    g++ -std=c++11 -g -c Writer.cpp -lpthread -I$(INC) -L$(LIB) -l$(lib) 
Reader.o: Reader.cpp
    g++ -std=c++11 -g -c Reader.cpp -lpthread -I$(INC) -L$(LIB) -l$(lib) 
Writer: Writer.o Mymessage.pb.o
    g++ -std=c++11 -g -o Writer Writer.o Mymessage.pb.o -lpthread -I$(INC) -L$(LIB) -l$(lib)
Reader: Reader.o Mymessage.pb.o
    g++ -std=c++11 -g -o Reader Reader.o Mymessage.pb.o -lpthread -I$(INC) -L$(LIB) -l$(lib) 
Mymessage.pb.o: Mymessage.pb.cc
    g++ -std=c++11 -g -c Mymessage.pb.cc -lpthread -I$(INC) -L$(LIB) -l$(lib) 
clean: Writer Reader Reader.o Writer.o Mymessage.pb.o
    rm Writer Reader Reader.o Writer.o Mymessage.pb.o 


京公网安备 11010502036488号