zoukankan      html  css  js  c++  java
  • linux下protocbuf安装使用(转载)

    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
    [cpp] view plain copy
     
     print?
    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
    [cpp] view plain copy
     
     print?
    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
    [cpp] view plain copy
     
     print?
    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文件
    [cpp] view plain copy
     
     print?
    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`  
  • 相关阅读:
    Educational Codeforces Round 10 C. Foe Pairs 水题
    Educational Codeforces Round 10 B. z-sort 构造
    CDOJ 1048 Bob's vector 三分
    Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
    第14届电子科大初赛民间盗版部分题目题解
    HDU 5654 xiaoxin and his watermelon candy 离线树状数组 区间不同数的个数
    HDU 5653 Bomber Man wants to bomb an Array. dp
    HDU 5652 India and China Origins 二分+并查集
    HDU 5651 xiaoxin juju needs help 数学
    HDU 5650 so easy 数学
  • 原文地址:https://www.cnblogs.com/goAhead-hust/p/5352884.html
Copyright © 2011-2022 走看看