• protobuf安装


    1 在网站 http://code.google.com/p/protobuf/downloads/list上可以下载 Protobuf 的源代码。然后解压编译安装便可以使用它了。
    安装步骤如下所示:
     
    也可在https://github.com/google/protobuf/releases/tag/v3.0.0-alpha-3 上面下载这个,我是从上面的网站直接跳转过来的找到的
     
    提取 protobuf-3.0.0-alpha-3
     cd protobuf-3.0.0-alpha-3
    sudo sh ./autogen.sh
     ./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`  
  • 相关阅读:
    merge sorted array
    Remove Duplicates from Sorted List
    climbing stairs(爬楼梯)(动态规划)
    点击事件加不上,换个位置调用
    The file couldn’t be opened because you don’t have permission to view it
    网络——性能调优
    SDWebImage缓存图片的机制(转)
    本地推送 简单代码演示
    UILable点击事件
    点击背景键盘退下
  • 原文地址:https://www.cnblogs.com/Erdos001/p/4594345.html
Copyright © 2020-2023  润新知