vs2013编译google protobuf生成的消息文件错误。

来源:互联网 发布:java jenkins 编辑:程序博客网 时间:2024/06/05 17:17

用google protobuf 生成的.h 和.cpp放到工程目录下,并添加好头文件目录和lib目录,在main.cpp里面添加

#pragma comment(lib,"libprotobuf.lib")//链接库文件
#pragma comment(lib,"libprotoc.lib")//链接库文件

之后,会发现编译不过,具体就是

d:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(2132): error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'

然后从网上找到解决方案在消息头文件中添加


#ifndef _ITERATOR_DEBUG_LEVEL
#define _ITERATOR_DEBUG_LEVEL 0
#else
#undef _ITERATOR_DEBUG_LEVEL
#define _ITERATOR_DEBUG_LEVEL 0
#endif

后来发现还是有问题。

libprotobuf.lib(common.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in addressbook.pb.obj

lib里面的obj的_ITERATOR_DEBUG_LEVEL 和消息obj的_ITERATOR_DEBUG_LEVEL 不一样,决定修改lib里面的obj的_ITERATOR_DEBUG_LEVEL值。

打开lib的工程,在 libprotobuf.lib 添加

Project Pages / Configuration Properties / C,C++ / Preprocessor / Preprocessor Definitions.

Add "_ITERATOR_DEBUG_LEVEL=0" in there worked.

方可编译通过。

 

_ITERATOR_DEBUG_LEVEL

 

编译模式

新的宏

旧宏

描述

调试

IDL=0

SCL=0,HID=0

禁用检查的迭代器和禁用迭代器调试。

IDL=1

SCL=1,HID=0

启用检查的迭代器和禁用迭代器调试。

IDL=2 (默认值)

SCL= (不适用),HID=1

默认情况下,启用迭代器调试;经过检查的迭代器无关。

Release

IDL=0 (默认值)

SCL=0

默认情况下,禁用检查的迭代器。

IDL=1

SCL=1

启用检查的迭代器;迭代器调试无关。

0 0