linux protobuf 例子,linux下安装protobuf教程+示例(详细)

(.pb.h:9:42: fatal error: google/protobuf/stubs/common.h: No such file or directory

看这个就应该知道是没有找到头文件,那么可以使用g++ 的-I 参数:

-I/usr/local/lib/protobuf/include来命令g++在/usr/local/lib/protobuf下查找头文件

以上/usr/local/lib/protobuf/是我的protobuf的安装地址,请替换成你的

)

1 在网站 http://code.google.com/p/protobuf/downloads/list上可以下载 Protobuf 的源代码。然后解压编译安装便可以使用它了。

安装步骤如下所示:

tar -xzf protobuf-2.1.0.tar.gz

cd protobuf-2.1.0

./configure --prefix=/usr/local/protobuf

make

make check

make install

2 > sudo vim /etc/profile

添加

export PATH=$PATH:/usr/local/protobuf/bin/

export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

保存执行

source /etc/profile

同时 在~/.profile中添加上面两行代码,否则会出现登录用户找不到protoc命令

3 > 配置动态链接库路径

sudo vim /etc/ld.so.conf

插入:

/usr/local/protobuf/lib

4 > su  #root 权限

ldconfig

5> 写消息文件:msg.proto

package lm;

message helloworld

{

required int32     id = 1;  // ID

required string    str = 2;  // str

optional int32     opt = 3;  //optional field

}

将消息文件msg.proto映射成cpp文件

protoc -I=. --cpp_out=. msg.proto

可以看到生成了

msg.pb.h 和msg.pb.cc

6> 写序列化消息的进程

write.cc

#include "msg.pb.h"

#include 

#include 

using namespace std;

int main(void)

{

lm::helloworld msg1;

msg1.set_id(101);

msg1.set_str("hello");

fstream output("./log", ios::out | ios::trunc | ios::binary);

if (!msg1.SerializeToOstream(&output)) {

cerr <

return -1;

}

return 0;

}

编译 write.cc

g++  msg.pb.cc write.cc -o write  `pkg-config --cflags --libs protobuf` -lpthread

执行write

./write, 可以看到生成了log文件

7> 写反序列化的进程

reader.cc

#include "msg.pb.h"

#include 

#include 

using namespace std;

void ListMsg(const lm::helloworld & msg) {

cout <

cout <

}

int main(int argc, char* argv[]) {

lm::helloworld msg1;

{

fstream input("./log", ios::in | ios::binary);

if (!msg1.ParseFromIstream(&input)) {

cerr <

return -1;

}

}

ListMsg(msg1);

}

编译:g++  msg.pb.cc reader.cc -o reader  `pkg-config --cflags --libs protobuf` -lpthread

执行./reader 输出 :

101

hello

8> 写Makefile文件

all: write reader

clean:

rm -f write reader msg.*.cc msg.*.h *.o  log

proto_msg:

protoc --cpp_out=. msg.proto

write: msg.pb.cc write.cc

g++  msg.pb.cc write.cc -o write  `pkg-config --cflags --libs protobuf`

reader: msg.pb.cc reader.cc

g++  msg.pb.cc reader.cc -o reader  `pkg-config --cflags --libs protobuf`

原文:http://www.cnblogs.com/oracleloyal/p/5485432.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值