C++ Can';t获取C+中的protobuf示例代码链接步骤+;

C++ Can';t获取C+中的protobuf示例代码链接步骤+;,c++,protocol-buffers,C++,Protocol Buffers,我正在尝试编译中提供的示例代码(添加地址,然后以序列化方式将其发送到另一个程序,该程序将对其进行反序列化并显示) protobuf源代码已编译并成功安装。(版本3.13.0) 当我尝试编译C++示例文件().< /P>时,挑战开始了。 我在VS 2019中创建了一个空白的C++项目,然后粘贴源代码行,并设置了附加的包含路径,包括ProtoBuF安装目录/包含,以及到TyBuf安装目录/LIB的附加LIB路径。编译了addressbook.proto(来自示例),并且.cc文件作为附加文件包含在这

我正在尝试编译中提供的示例代码(添加地址,然后以序列化方式将其发送到另一个程序,该程序将对其进行反序列化并显示)

protobuf源代码已编译并成功安装。(版本3.13.0)

当我尝试编译C++示例文件().< /P>时,挑战开始了。

我在VS 2019中创建了一个空白的C++项目,然后粘贴源代码行,并设置了附加的包含路径,包括ProtoBuF安装目录/包含,以及到TyBuf安装目录/LIB的附加LIB路径。编译了addressbook.proto(来自示例),并且.cc文件作为附加文件包含在这个玩具项目中。代码中已经引用了头文件(.pb.h),并且找到了所有包含文件等,在编译过程中没有显示任何错误

但是,在链接阶段,它抛出了79个错误,其中大部分显然是缺少的库。它还显示163条警告。这里重现了一些初始错误

''' 错误LNK2001未解析的外部符号“private:unsigned char*uu cdecl google::protobuf::io::EpsCopyOutputStream::WriteStringMaybeAliasedOutline(unsigned int,class std::basic_string const&,unsigned char*)”(?WriteStringMaybeAliasedOutline@EpsCopyOutputStream@io@protobuf@谷歌@@aeaapeaebv?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@PEAE@Z)示例\u协议C:\Users\quasa\source\repos\示例\u协议\addressbook.pb.obj 1

错误LNK2001未解析的外部符号“private:unsigned char*uu cdecl google::protobuf::io::EpsCopyOutputStream::EnsureSpaceFallback(unsigned char*)”(?EnsureSpaceFallback@EpsCopyOutputStream@io@protobuf@谷歌@@AEAAPEAEPEAE@Z)示例\u协议C:\Users\quasa\source\repos\示例\u协议\addressbook.pb.obj 1

错误LNK2001未解析的外部符号“void uu cdecl google::protobuf::internal::InitSCCImpl(struct google::protobuf::internal::SCCInfoBase*)”(?InitSCCImpl@internal@protobuf@google@@YAXPEAUSCCInfoBase@123@@Z) 示例\u协议C:\Users\quasa\source\repos\示例\u协议\addressbook.pb.obj 1

错误LNK2001未解析的外部符号“void uu cdecl google::protobuf::internal::VerifyVersion(int,int,char const*)”(?VerifyVersion@internal@protobuf@google@@YAXHHPEBD@Z)示例\u协议C:\Users\quasa\source\repos\示例\u协议\addressbook.pb.obj 1

错误LNK2001未解析的外部符号“void\uu cdecl google::protobuf::internal::AssignDescriptors(结构google::protobuf::internal::DescriptorTable const*,bool)”(?AssignDescriptors@internal@protobuf@google@@YAXPEBUDescriptorTable@123@_N@Z)示例\u协议C:\Users\quasa\source\repos\示例\u协议\addressbook.pb.obj 1

错误LNK2001未解析的外部符号“public:void uu cdecl google::protobuf::internal::LogFinisher::operator=(类google::protobuf::internal::LogMessage&”)(??4LogFinisher@internal@protobuf@google@@QEAAXAEAVLogMessage@123@@Z) 示例\u协议C:\Users\quasa\source\repos\example\u协议\addressbook.pb.obj 1
'''

很明显,有些库似乎丢失或链接不正确。但是,为其他库指定的目录中似乎有3个库。我显然是protobuf的新手。欢迎提供任何建议


谢谢

库丢失了,因为您只指定了libdirs。您实际链接了所需的库吗?因为指定libdirs(-L表示gcc)只是为了方便起见,这样您就可以使用
-lmylibname
而不必指定完整路径(请查看文章底部以查看差异)

因此,就g++指令而言,假设
main.o
需要与
libyour.a
链接,并且lib位于/lib目录中,您已经完成了以下操作:

g++ main.o -L/lib
您可以清楚地看到库没有被链接。您必须做的是:

g++ main.o -L/lib -lyour
(链接器正在附加lib)


正如您自己在评论中注意到的,考虑到您使用的是VS,您应该配置一个附加的依赖项开关。

您指定了libdir,这很好,但是您实际链接了所需的库吗?因为为gcc指定libdirs(
-L
)只是为了方便起见,您可以使用-lmylibname,而不必指定完整路径(请查看本文底部的差异),谢谢@MarekPiotrowski!您为我设置了正确的路径。在VS 2019中,您不仅需要在“要包含的其他目录”中包含路径,还需要在中枚举库“附加依赖项”…这很顺利。如果您将您的评论设置为解决方案,我将很高兴将其标记为有效答案。很高兴我能提供帮助。将其作为答案发布,谢谢!