生成的Protobuf代码崩溃了应用程序

时间:2012-10-21 17:28:50

标签: c++ qt mingw protocol-buffers

我正在尝试使用Google的Protocol Buffers为应用程序实现保存文件。

制备

已创建一个简单的测试.proto文件来测试功能:

message LessonFile {  
  optional string creator = 1;  
}

创建的.pb.cc和.pb.h包含在项目中。 lib和include目录在项目的属性中指定。

问题
在运行时将新生成的代码包含到项目结果应用程序中。

通过调试崩溃状态,它指向了这个函数:

UnknownFieldSet::UnknownFieldSet()
    : fields_(NULL) {} ---------here---------

而上面的框架指向:

LessonFile::LessonFile()
    : ::google::protobuf::Message() { ---------here---------
    SharedCtor();
}

调用堆栈:

google::protobuf::UnknownFieldSet::UnknownFieldSet (this=0x770e3cc3)
LessonFile (this=0xba64b30) protobuf_AddDesc_LessonFile_2eproto ()
StaticDescriptorInitializer_LessonFile_2eproto (this=0x4bc108)
__static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) global constructors keyed to _Z38protobuf_AssignDesc_LessonFile_2eprotov ()
__do_global_ctors ()
__mingw_CRTStartup () WinMainCRTStartup ()

其他信息
环境:Netbeans; Windows7-64; Qt-4.8.1 + mingw,protobuf-2.4.1。
Protobuf编译过程也存在问题: make check 一直都会失败并显示以下消息:

  

在./include/gtest/gtest-param-test.h:159:0中包含的文件中,                    来自./include/gtest/gtest.h:59,                    来自src / gtest.cc:34:./include/gtest/internal/gtest-param-util-generated.h:In   实例化::运算符   testing :: internal :: ParamGenerator()const [with T = bool; T1 =   布尔; T2 = bool]>:./ include /gtest/gtest-param-test.h:1186:28:
  从这里要求   ./include/gtest/internal/gtest-param-util-generated.h:80:26:错误:    未在此范围内声明,并且没有声明   在实例化时通过参数依赖查找找到   [-fpermissive]在./include/gtest/gtest.h:59:0中包含的文件中,                    来自src / gtest.cc:34:./include/gtest/gtest-param-test.h:288:58:注意:testing :: internal :: ParamGenerator testing :: ValuesIn(const Container&)>声明   在这里,稍后在翻译单元

虽然 protoc.exe 已成功编译,并且 make install 已创建包含目录和lib * .a / lib * .dll。一个文件。

1 个答案:

答案 0 :(得分:0)

评论转换为答案,供将来的观众使用:

  1. 下载MingW + MSYS包然后安装。
  2. 将MingW安装文件夹中的“msys”文件夹复制到“C:\ msys”,删除“C:\ msys”中的“mingw”文件夹。
  3. 将“C:\ msys \ etc \ fstab”编辑为“C:/ QtSDK / mingw / mingw”
  4. 将protobuf源复制到“C:\ msys \ home \”
  5. 打开msys shell,cd到“/ home // protobuf”
  6. http://eschew.wordpress.com/2009/09/20/building-protobuf-with-mingw-gcc-4-4-0/ - 第2项
  7. 运行“./configure --disable-shared”
  8. 运行“make”
  9. 手动将生成的库文件复制到qt库目录(也是头文件 - 维护目录结构)