一、下载
在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