VS2013+protobuf-2.5.0 编译源码,嵌入新工程,使用google protobuf数据格式协议
2017-07-28 15:39
323 查看
1、下载两个压缩包,protobuf-2.5.0.tar.gz , protobuf-2.5.0-win32.zip (压缩包已经上传,可以通过我的名字去查找看看)
2、解压protobuf-2.5.0-win32.zip,把protoc.exe丢到C盘的windows 目录下
3、解压protobuf-2.5.0.tar.gz,进入vsprojects目录(如果你找不到,说明你的版本问题,重新下载吧)
4、在vsprojects目录下会找到extract_include.bat批处理文件,直接双击运行,会在本目录下生成一个include文件夹
5、在vsprojects目录下找到后缀是sln的文件,用VS打开这个文件。
6、打开之后你会发现有9个工程,我们只需要关心libprotobuf,libprotobuf-lite ,libprotoc 这三个工程,我们需要得到对应的三个lib
7、打开libprotobuf工程下的Source Files文件夹,找到zero_copy_stream_impl_lite.cc,打开它,在最前面加上一个头文件#include <algorithm>,保存关闭
8、打开libprotobuf工程下的Head Files文件夹,找到repeated_field.h,打开它,用ctrl+f找关键词internal. 找到
namespace internal {
template <typename Element, bool HasTrivialCopy>
void ElementCopier<Element, HasTrivialCopy>::operator()(
Element to[], const Element from[], int array_size)
{
std::copy(from, from + array_size, to);
}
}
这个整体,然后把std::copy(from, from + array_size, to);隐掉,
替换成std::copy(from,from+array_size,stdext::checked_array_iterator<Element*>(to,array_size));
9、在libprotobuf上点击右键,选择 仅用于项目->仅重新生成libprotobuf. 这时候会单独编译这个工程,会生成lib文件在Debug目录下。
10、在libprotobuf-lite上点击右键,选择 仅用于项目->仅重新生成libprotobuf-lite 这时候会单独编译这个工程,会生成lib文件在Debug目录下。
11、在libprotoc 上点击右键,选择 仅用于项目->仅重新生成libprotobuf-lite 这时候会单独编译这个工程,会生成lib文件在Debug目录下。
//------------------------上面的操作最后得到了三个lib文件,很重要---------------------------------//
12、创建一个console的C++工程,直接编译没错就行。我要的就是一个空的或者带着main的工程。
13、进入刚创建的工程目录,也就是后缀是sln的文件所在的这个位置,在这个目录下创建一个lib空文件夹,一个空的src文件夹
14、把刚才生成的三个lib文件拷贝到这里的lib下
15、去protobuf解压所在的目录,找到src文件夹,把里面的google文件夹全部拷贝到新创建的工程的src文件夹下。
16、在新创建的工程的sln所在的目录的位置,新建一个文件,person.proto,文件内容就是你要自定义的数据协议
message Person {
required int32 id = 1;
required string name = 2;
<
949b
span style="white-space:pre;">optional string email = 3;
}
这就是文件的内容。
17、去protobuf解压所在的目录,找到我之前说的extract_include.bat批处理文件,把这个文件放到后缀名为vcxproj文件所在的目录下
18、双击运行extract_include.bat,当前目录下会有include文件夹,就对了。
19、去新创建的工程的后缀名sln所在的目录下,新建一个build.bat文件,内容为protoc --cpp_out=./ Person.proto,保存关闭。
20、直接双击build.bat,当前目录下回生成Person.pb.cc ,Person.pb.h两个文件。
//-----------上面主要是移植---------------------//
21、打开新工程,如果已将打开,就不用操作了。
22、添加头文件Person.pb.h,添加源文件Person.pb.cc
23、主程序头部,添加#include "Person.pb.h"
24、点击工程名字,右键选择属性->VC++目录->包含目录 这里添加两个目录,一个是新工程生成的include所在的路径,一个是Person.pb.h所在
的路径
25、点击工程名字,右键选择属性->链接器->常规 在附加库目录这,选择新工程的lib文件夹得路径
26、点击工程名字,右键选择属性->链接器->输入 在附加依赖项,添加libprotobuf.lib ,libprotobuf-lite.lib ,libprotoc.lib
这三个lib文件,也是我们前面生成的lib文件,已经拷贝到了新工程的lib文件夹下。
//--------------一切准备就绪,可以开始写代码使用了---------------------------//
我所说的,全都是针对我所上传的两个压缩包,其他的我不敢保证哦。
2、解压protobuf-2.5.0-win32.zip,把protoc.exe丢到C盘的windows 目录下
3、解压protobuf-2.5.0.tar.gz,进入vsprojects目录(如果你找不到,说明你的版本问题,重新下载吧)
4、在vsprojects目录下会找到extract_include.bat批处理文件,直接双击运行,会在本目录下生成一个include文件夹
5、在vsprojects目录下找到后缀是sln的文件,用VS打开这个文件。
6、打开之后你会发现有9个工程,我们只需要关心libprotobuf,libprotobuf-lite ,libprotoc 这三个工程,我们需要得到对应的三个lib
7、打开libprotobuf工程下的Source Files文件夹,找到zero_copy_stream_impl_lite.cc,打开它,在最前面加上一个头文件#include <algorithm>,保存关闭
8、打开libprotobuf工程下的Head Files文件夹,找到repeated_field.h,打开它,用ctrl+f找关键词internal. 找到
namespace internal {
template <typename Element, bool HasTrivialCopy>
void ElementCopier<Element, HasTrivialCopy>::operator()(
Element to[], const Element from[], int array_size)
{
std::copy(from, from + array_size, to);
}
}
这个整体,然后把std::copy(from, from + array_size, to);隐掉,
替换成std::copy(from,from+array_size,stdext::checked_array_iterator<Element*>(to,array_size));
9、在libprotobuf上点击右键,选择 仅用于项目->仅重新生成libprotobuf. 这时候会单独编译这个工程,会生成lib文件在Debug目录下。
10、在libprotobuf-lite上点击右键,选择 仅用于项目->仅重新生成libprotobuf-lite 这时候会单独编译这个工程,会生成lib文件在Debug目录下。
11、在libprotoc 上点击右键,选择 仅用于项目->仅重新生成libprotobuf-lite 这时候会单独编译这个工程,会生成lib文件在Debug目录下。
//------------------------上面的操作最后得到了三个lib文件,很重要---------------------------------//
12、创建一个console的C++工程,直接编译没错就行。我要的就是一个空的或者带着main的工程。
13、进入刚创建的工程目录,也就是后缀是sln的文件所在的这个位置,在这个目录下创建一个lib空文件夹,一个空的src文件夹
14、把刚才生成的三个lib文件拷贝到这里的lib下
15、去protobuf解压所在的目录,找到src文件夹,把里面的google文件夹全部拷贝到新创建的工程的src文件夹下。
16、在新创建的工程的sln所在的目录的位置,新建一个文件,person.proto,文件内容就是你要自定义的数据协议
message Person {
required int32 id = 1;
required string name = 2;
<
949b
span style="white-space:pre;">optional string email = 3;
}
这就是文件的内容。
17、去protobuf解压所在的目录,找到我之前说的extract_include.bat批处理文件,把这个文件放到后缀名为vcxproj文件所在的目录下
18、双击运行extract_include.bat,当前目录下会有include文件夹,就对了。
19、去新创建的工程的后缀名sln所在的目录下,新建一个build.bat文件,内容为protoc --cpp_out=./ Person.proto,保存关闭。
20、直接双击build.bat,当前目录下回生成Person.pb.cc ,Person.pb.h两个文件。
//-----------上面主要是移植---------------------//
21、打开新工程,如果已将打开,就不用操作了。
22、添加头文件Person.pb.h,添加源文件Person.pb.cc
23、主程序头部,添加#include "Person.pb.h"
24、点击工程名字,右键选择属性->VC++目录->包含目录 这里添加两个目录,一个是新工程生成的include所在的路径,一个是Person.pb.h所在
的路径
25、点击工程名字,右键选择属性->链接器->常规 在附加库目录这,选择新工程的lib文件夹得路径
26、点击工程名字,右键选择属性->链接器->输入 在附加依赖项,添加libprotobuf.lib ,libprotobuf-lite.lib ,libprotoc.lib
这三个lib文件,也是我们前面生成的lib文件,已经拷贝到了新工程的lib文件夹下。
//--------------一切准备就绪,可以开始写代码使用了---------------------------//
我所说的,全都是针对我所上传的两个压缩包,其他的我不敢保证哦。
相关文章推荐
- 关于如何在Android源码目录中建立自己的C工程,并用mm命令单独进行该C工程模块的编译,以及Android.mk的使用介绍(2)
- 使用qmake编译QT工程,手写源码
- 关于如何在Android源码目录中建立自己的C工程,并用mm命令单独进行该C工程模块的编译,以及Android.mk的使用介绍(1)
- boost库嵌入工程源码的使用方式
- win10 使用cmake编译opencv源码生成VS工程(二)
- JasperReport实现网络办公系统的报表(一):工程源码+系统使用说明书
- 使用GDB源码进行交叉编译
- VC使用技巧:让你团队里所有人在编译工程时都要看你的代码注释
- 使用BCB对zlib进行源码编译
- 关于VC60中创建MFC工程时, 使用了UNICODE选项后编译报错的解决方法
- shell脚本在编译工程代码时候的使用
- 使用脚本进行LAMP架构源码编译安装(经多次测试可行) 推荐
- android ubuntu9.10 源码的编译 Eclipse工程 Contacts编译 应用加载
- linux 下如何编译使用SDL的工程
- [陆续更新] IPhone中编译Ogre源码及使用
- [陆续更新] IPhone中编译Ogre源码及使用
- JasperReport实现网络办公系统的报表(一):工程源码+系统使用说明书
- 学习使用AutoMake1.9的自动生成工程文件(二)——flat型程序编译实践过程
- VC6 编译并且使用wxWidgets - 我们用命令行方式build - 使用标准的工程方法
- 一套可嵌入或独立使用的翻页控件: WebPager(附源码)