windows下使用protocol buffer

一、下载


在github上下载 https://github.com/google/protobuf


二、下载gtest


官方地址 https://code.google.com/p/googletest/   官网上不的童鞋可以在这下载 http://download.csdn.net/detail/u011476173/8129191
下载完成后解压到protobuf的根目录,名字改为gtest。

三、编译


参照protocolbuffer的ReadMe操作,编译时会报类似error C2977: 'std::tuple' : too many template arguments的错误,解决方案参考 http://blog.csdn.net/u011476173/article/details/40864381

再次进行编译会报很多多重定义的错误。出现这个问题原因是工程在转换过程中,会有一些工程使用MD编译选项,有一些工程使用MTD编译选项,导致静态和动态连接MSVC的连接库有冲突。默认全部工程改变MT或MTD编译,即可以解决。
在此把gtest和gtest_main两个项目分别邮件打开project的properties -> C\C++ -> Code Generation -> Runtime Library 在下拉列表里面选择Multi-threaded Debug DLL(/MDd) 即可

四、extract_includes.bat


双击执行extract_includes.bat,copy文件。

五、生成proto文件


copy(三)中编译生成的protoc.exe到任意你想的地方,最好把该路径添加到环境变量的PATH中。
编写proto文件,打开cmd,使用  protoc -I=$SRC_DIR –cpp_out=$DST_DIR $SRC_DIR/test.proto 命令生成C++文件。

六、测试


1、新建测试项目。
2、把(四)中copy的文件(即include目录下的所有文件)copy到项目中,并配置好头文件搜索路径
3、把(三)中编译生成的 libprotobuf.lib, libprotobuf-lite.lib, 和 libprotoc.lib copy到项目中,并配置好lib库搜索路径。
4、把(五)中生成的C++文件copy到项目中。
5、编写测试代码。如:
<span style="white-space:pre">	</span>lm::HelloWorld msg ;
	msg.set_id(16) ;
	msg.set_str("abc") ;
	msg.set_opt(6) ;

	std::fstream output("./log", std::ios::out|std::ios::trunc|std::ios::binary) ;
	if (!msg.SerializeToOstream(&output))
	{
		std::cout<<"ERROE"<<std::endl ;
	}

	output.close() ;

	lm::HelloWorld msg1 ;
	std::fstream input("./log", std::ios::in|std::ios::binary) ;

	if (!msg1.ParseFromIstream(&input))
	{
		std::cout<<"ERROR"<<std::endl ;
	}

	input.close() ;

	std::cout<<msg1.id()<<"  "<<msg1.str()<<"  "<<msg1.opt()<<std::endl ;


在编译项目时可能会遇到error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe这个错误。
解决方案:打开project的properties -> C\C++ -> Preprocessor -> Processor Definitions 在下拉列表里面选择<Edit...> 
在preprocessor definition 的窗口下,添加 _SCL_SECURE_NO_WARNINGS,然后保存。接着重新 build project 即可。

七、其他


为了方便大家,我把编译好的protoc.exe以及libprotobuf.lib、libprotobuf-lite.lib和libprotoc.lib,还有proto的头文件放到网上,下载地址: http://download.csdn.net/detail/u011476173/8131855












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值