zoukankan      html  css  js  c++  java
  • protobuf_1

    我使用的是最新版本的protobuf(protobuf-2.6.1),编程工具使用VS2010。简单介绍下google protobuf:

    google protobuf 主要用于通讯,是google出的一个结构化信息传递工具,有着效率高、占存储少的优点,常被用于网络通讯。

    Google protobuf主要是针对Linux下的开发,但是为了照顾windows的开发人员,google也给出了相应的方案。

    windows下,需要下载两个包protobuf-2.6.1.tar.bz2和protobuf-2.6.1-win32.zip

    下载链接http://code.google.com/p/protobuf/downloads/list

    接下来是对这两个包的在windows环境下的操作:

    一、假设两个包都放在G根目录下,直接将两个包解压。在G:protobuf-2.6.1vsprojects下有protobuf.sln这个文件,用VS2010打开,得到如下9个解决方案。

    可能有些其他教程会说这里的转换会有些小问题出现,但是我执行这一步的时候,没有遇到过,是一步到位的。

    二、在Solution ‘protobuf’(9 projects)那右键,点击Build Solution生成我们需要的文件。

    三、完成上一步后,在G:protobuf-2.5.0vsprojectsDebug下会生成下面.exe文件和.lib文件

    现在来使用这些生成的文件。

    在G:protobuf-2.6.1examples下写一个person.proto文件,代码如下:

    package lm;

    message helloworld

    {

           required int32         id=1;

           required string        str=2;

           optional int32         opt=3;

    }

    打开dos命令界面(运行->cmd),切换目录到G:protobuf-2.6.1vsprojectsDebug下,输入命令行:protoc -I=G:protobuf-2.6.1examples--cpp_out=G:protobuf-2.6.1examples G:protobuf-2.6.1examplesperson.proto

    特别注意这里的空格。该命令的意思是让person.proto文件生成.h和.cc文件,cpp_out表示生成C++代码,cpp_out等号后面第一个路径指生成文件的存放路径,第二个指.proto文件的绝对路径。

    新建一个工程,命名为Person_,将生成的person.pb.h和person.pb.cc文件导进工程,

    这里需要特别注意一点:光在工程里导入文件是不够的,最好在工程目录下再将其拷贝进去,否则有可能出现下面的错误。将.pd.h和.pd.cc文件拷贝到工程目录下就不会报这样的错误。

    现在开始来配置工程使用protobuf的头文件和lib文件的路径

    右键工程,打开Properties(属性)

    点击ConfigurationProperties(配置属性)下的C/C++General(常规),右边AdditionalInclude Directories(附加包含目录),导入这个路径G:protobuf-2.5.0src

    再次进入配置属性,点击Linker(链接器)àGeneral(常规),右边的Additional LibraryDirectories(附加库目录),导入这个路径G:protobuf-2.5.0vsprojectsDebug

    四、接下来编写person.cpp

    #include <iostream>
    #include <string>
    #include "person.pb.h"

    using namespace std;

    int main()
    {
    lm::helloworld msg1;
    msg1.set_id(100);
    msg1.set_str("200");
    msg1.set_opt(50);

    cout << msg1.id() << endl;
    cout << msg1.str() << endl;
    cout << msg1.opt() << endl;

    cin.get();
    return 0;
    }

    饮水思源:

    http://blog.csdn.net/chenkjiang/article/details/12569835

  • 相关阅读:
    Pyspider实例之抓取数据并保存到MySQL的数据库
    pyspider中内容选择器常用方法汇总
    pyspider用PyQuery解析页面数据
    CasperJs 入门介绍
    移动应用抓包调试利器Charles
    GO语言文件的创建与打开实例分析
    Golang之实现一个负载均衡算法(随机,轮询)
    重新认识一个强大的 Gson
    关于Java的File.separator
    centos重启redis后,数据丢失
  • 原文地址:https://www.cnblogs.com/kaishan1990/p/4527402.html
Copyright © 2011-2022 走看看