当前位置:   article > 正文

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

linux下安装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
  1. package lm;   
  2. message helloworld   
  3. {   
  4.     required int32     id = 1;  // ID     
  5.     required string    str = 2;  // str    
  6.     optional int32     opt = 3;  //optional field   
  7. }  
将消息文件msg.proto映射成cpp文件
protoc -I=. --cpp_out=. msg.proto
可以看到生成了
msg.pb.h 和msg.pb.cc

6> 写序列化消息的进程
write.cc
  1. #include "msg.pb.h"  
  2. #include <fstream>  
  3. #include <iostream>  
  4. using namespace std;  
  5.   
  6. int main(void)   
  7. {   
  8.   
  9.     lm::helloworld msg1;   
  10.     msg1.set_id(101);   
  11.     msg1.set_str("hello");   
  12.     fstream output("./log", ios::out | ios::trunc | ios::binary);   
  13.   
  14.     if (!msg1.SerializeToOstream(&output)) {   
  15.         cerr << "Failed to write msg." << endl;   
  16.         return -1;   
  17.     }          
  18.     return 0;   
  19. }  
编译 write.cc 
 g++  msg.pb.cc write.cc -o write  `pkg-config --cflags --libs protobuf` -lpthread
 
执行write 
./write, 可以看到生成了log文件

7> 写反序列化的进程
reader.cc
  1. #include "msg.pb.h"  
  2. #include <fstream>  
  3. #include <iostream>  
  4. using namespace std;  
  5.   
  6. void ListMsg(const lm::helloworld & msg) {    
  7.     cout << msg.id() << endl;   
  8.     cout << msg.str() << endl;   
  9. }   
  10.   
  11. int main(int argc, char* argv[]) {   
  12.   
  13.     lm::helloworld msg1;   
  14.   
  15.     {   
  16.         fstream input("./log", ios::in | ios::binary);   
  17.         if (!msg1.ParseFromIstream(&input)) {   
  18.             cerr << "Failed to parse address book." << endl;   
  19.             return -1;   
  20.         }         
  21.     }   
  22.   
  23.     ListMsg(msg1);   
  24. }  
编译:g++  msg.pb.cc reader.cc -o reader  `pkg-config --cflags --libs protobuf` -lpthread
执行./reader 输出 :
101
hello

8> 写Makefile文件
  1. all: write reader  
  2.   
  3. clean:  
  4.     rm -f write reader msg.*.cc msg.*.h *.o  log  
  5.   
  6. proto_msg:  
  7.     protoc --cpp_out=. msg.proto  
  8.   
  9.   
  10. write: msg.pb.cc write.cc  
  11.     g++  msg.pb.cc write.cc -o write  `pkg-config --cflags --libs protobuf`  
  12.   
  13. reader: msg.pb.cc reader.cc  
  14.     g++  msg.pb.cc reader.cc -o reader  `pkg-config --cflags --libs protobuf`  
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/1008928
推荐阅读
相关标签
  

闽ICP备14008679号