我使用protoc.exe工具生成.h和.cc,当我在我的解决方案中包含pb.h时,它无法编译
test.pb.h(17):致命错误C1060:编译器没有堆空间
我添加了/Zm
选项(我尝试了所有因素,例如/Zm2000
,/Zm200
,/Zm1000
等等。
但错误仍然出现......
有什么想法吗?因为我有点卡住了,
谢谢!
Proto文件:
的
的 package MSGTest;
enum EnumMsg
{
EMF_A = 1;
EMF_B = 2;
}
message MSGExtended
{
enum MSG_TYPE
{
MSGT_SP = 1;
}
required MSG_TYPE type = 1;
}
message MSGExtended2
{
enum MSG_TYPE
{
MSGT_SP = 1;
}
required MSG_TYPE type = 1;
}
message MSGExtendedb
{
required EnumMsg from = 1;
optional MSGExtended msga = 2;
optional MSGExtendedb msgb = 3;
}
的
答案 0 :(得分:1)
自动生成的* .pb.h文件中的第17行始终相同,它是
#error This file was generated by an older version of protoc which is
或与邻近区块一起:
#if GOOGLE_PROTOBUF_VERSION < 2004000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 2004000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif
每当上述两个条件中的任何一个为真,而不是打印错误消息,VS2012(在我的情况下)放弃了误导性的&#34;致命错误C1060:编译器超出堆空间&#34;。 条件成立的原因是我的系统有点混乱:c:/ opt / bin包含较旧的protoc.exe(版本2.4.0),而包含GOOGLE_PROTOBUF_VERSION和GOOGLE_PROTOBUF_MIN_PROTOC_VERSION定义的版本为2.5.1(2005001) ),使第二个条件成立。 将正确的protoc.exe复制到c:/ opt / bin可以解决问题。