我正在尝试使用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。一个文件。
答案 0 :(得分:0)
评论转换为答案,供将来的观众使用: