即使我已经包含了标题和库(它是自编译的)

时间:2016-07-15 16:17:15

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

我已经花了好几个小时才能让protobuf工作,但感觉我已经尝试了所有尝试的东西,但我仍然无法在没有这些错误的情况下进行链接:

LNK2019 unresolved external symbol "public: __thiscall tutorial::Person_PhoneNumber::Person_PhoneNumber(void)" (??0Person_PhoneNumber@tutorial@@QAE@XZ) referenced in function "public: static class tutorial::Person_PhoneNumber * __cdecl google::protobuf::Arena::Create<class tutorial::Person_PhoneNumber>(class google::protobuf::Arena *)" (??$Create@VPerson_PhoneNumber@tutorial@@@Arena@protobuf@google@@SAPAVPerson_PhoneNumber@tutorial@@PAV012@@Z) 
LNK2019 unresolved external symbol "public: __thiscall tutorial::Person::Person(void)" (??0Person@tutorial@@QAE@XZ) referenced in function "public: static class tutorial::Person * __cdecl google::protobuf::Arena::Create<class tutorial::Person>(class google::protobuf::Arena *)" (??$Create@VPerson@tutorial@@@Arena@protobuf@google@@SAPAVPerson@tutorial@@PAV012@@Z)
LNK2019 unresolved external symbol "public: __thiscall tutorial::AddressBook::AddressBook(void)" (??0AddressBook@tutorial@@QAE@XZ) referenced in function _main
LNK2019 unresolved external symbol "public: virtual __thiscall tutorial::AddressBook::~AddressBook(void)" (??1AddressBook@tutorial@@UAE@XZ) referenced in function _main    

我正在使用MS Visual Studio 2015.包含库和头文件 (如果我重命名.lib文件,它会抱怨无法找到它。)

我已经尝试了2.6.1和3.0.0b3(protoc和libprotobuf,两者都是自编译的而不是)。我自己编译了protoc并用它编译了示例.proto文件,它仍然无法编译protobuf附带的示例。我已经在调试和发布模式下编译了我自己的项目和protobuf,并且我已经将protobuf自己的测试项目中的每个设置或多或少地复制到了我自己的项目中,并且它没有编译

感觉就像我错过了一些超级简单的东西,但我用谷歌搜索了几个小时,我无法找出我做错了什么。

即使是像下面那样的超级简单文件也会产生相同的错误。

#include "example.pb.h"

int main()
{
    GOOGLE_PROTOBUF_VERIFY_VERSION;
    Example ex;
}

还有什么可以做/尝试?

1 个答案:

答案 0 :(得分:1)

当您在protoc上运行example.proto时,会生成两个文件:example.pb.hexample.pb.cc。您需要将example.pb.cc编译到您的程序中。