3

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

准备

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

message LessonFile {  
  optional string creator = 1;  
}

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

问题
将新生成的代码包含在项目运行时导致应用程序崩溃。

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

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;视窗7-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:在 ::operator 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.a 文件。

4

1 回答 1

1

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

  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. 运行“制作”
  9. 手动将生成的库文件复制到 qt 库目录(头文件以及 - 维护目录结构)
于 2012-10-26T03:44:55.943 回答