• 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`  
  • 相关阅读:
    【装机知识】内存条知识总结
    【装机知识】主板知识整理
    【装机知识】CPU知识整理
    SHELL 学历笔记
    tmux 会话恢复(no sessions)
    数据库客户端神器(mycli/pgcli/iredis)
    golang编写二叉树
    编译安装带lua 的 vim 编辑器
    linux 下vim 开发环境配置(通用所有编程语言)
    mac 下安装mysql
  • 原文地址:https://www.cnblogs.com/goAhead-hust/p/5352884.html
Copyright © 2020-2023  润新知