Google Protobuf'编译器已超出堆空间'

时间:2014-08-06 14:22:04

标签: visual-c++ visual-studio-2012 protocol-buffers

我使用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;
 }

1 个答案:

答案 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可以解决问题。