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、编写测试代码。如:
	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"<


在编译项目时可能会遇到error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe这个错误。
解决方案:打开project的properties -> C\C++ -> Preprocessor -> Processor Definitions 在下拉列表里面选择 
在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












你可能感兴趣的:(protocol,buffer)