gpt4 book ai didi

c++ - 无法在 C++ 中获取 protobuf 示例代码链接步骤

转载 作者:行者123 更新时间:2023-12-02 10:10:46 29 4
gpt4 key购买 nike

我正在尝试编译 github source for the protobuf 中提供的示例代码(添加地址,然后以序列化的方式将其发送到另一个反序列化并显示它的程序)。
protobuf 源码编译安装成功。 (版本 3.13.0)。
当我尝试编译 C++ 示例文件 (add_person.cpp) 时,挑战就开始了。
我在 VS 2019 中创建了一个空白 C++ 项目,然后粘贴了源代码行,并设置了额外的包含路径以包含 protobuf 安装目录/include,以及 protobuf 安装目录/lib 的额外 lib 路径。 addressbook.proto(来自示例)已编译,.cc 文件作为附加文件包含在此玩具项目中。代码中已经引用了头文件(.pb.h),并且在编译过程中找到了所有包含文件等,没有显示任何错误。
但是,在链接阶段,它抛出了 79 个错误,其中大部分显然是一些缺少的库。它还显示 163 条警告。此处复制了一些初始错误。
'''
错误 LNK2001 未解析的外部符号“private: unsigned char * __cdecl google::protobuf::io::EpsCopyOutputStream::WriteStringMaybeAliasedOutline(unsigned int,class std::basic_string const &,unsigned char *)"(?WriteStringMaybeAliasedOutline@EpsCopyOutputStream@io@protobuf@google@@AEAAPEAEIAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAE@ Z) example_proto C:\Users\quasa\source\repos\example_proto\addressbook.pb.obj 1
错误 LNK2001 无法解析外部符号“private: unsigned char * __cdecl google::protobuf::io::EpsCopyOutputStream::EnsureSpaceFallback(unsigned char *)” (?EnsureSpaceFallback@EpsCopyOutputStream@io@protobuf@google@@AEAAPEAEPEAE@Z) example_proto C :\Users\quasa\source\repos\example_proto\addressbook.pb.obj 1
错误 LNK2001 无法解析的外部符号“void __cdecl google::protobuf::internal::InitSCCImpl(struct google::protobuf::internal::SCCInfoBase *)”(?InitSCCImpl@internal@protobuf@google@@YAXPEAUSCCInfoBase@123@@Z ) example_proto C:\Users\quasa\source\repos\example_proto\addressbook.pb.obj 1
错误 LNK2001 无法解析外部符号“void __cdecl google::protobuf::internal::VerifyVersion(int,int,char const *)”(?VerifyVersion@internal@protobuf@google@@YAXHHPEBD@Z) example_proto C:\Users\quasa\source\repos\example_proto\addressbook.pb.obj 1
错误 LNK2001 未解析的外部符号“void __cdecl google::protobuf::internal::AssignDescriptors(struct google::protobuf::internal::DescriptorTable const *,bool)”(?AssignDescriptors@internal@protobuf@google@@YAXPEBUDescriptorTable@123 @_N@Z) example_proto C:\Users\quasa\source\repos\example_proto\addressbook.pb.obj 1
错误 LNK2001 无法解析的外部符号“public: void __cdecl google::protobuf::internal::LogFinisher::operator=(class google::protobuf::internal::LogMessage &)” (??4LogFinisher@internal@protobuf@google@ @QEAAXAEAVLogMessage@123@@Z) example_proto C:\Users\quasa\source\repos\example_proto\addressbook.pb.obj 1
'''
很明显,某些库似乎丢失或没有正确链接。但是,为其他库指定的目录中似乎存在 3 个库。我显然对 protobuf 完全陌生。欢迎任何建议。
谢谢

最佳答案

缺少库,因为您只指定了 libdirs。你真的链接了所需的库吗?因为指定 libdirs (-L for gcc) 只是为了方便,所以你可以使用 -lmylibname并且不指定完整路径(查看 this 文章的底部以查看差异)。
因此,就 g++ 指令而言,假设 main.o需要链接libyour.a并且 lib 位于/lib 目录中,您已完成以下操作:

g++ main.o -L/lib
您可以清楚地看到该库没有被链接。你必须做的是:
g++ main.o -L/lib -lyour
(链接器正在附加lib)。
正如您自己在评论中注意到的那样,考虑到您使用的是 VS,有一个 附加依赖 您应该配置的开关。

关于c++ - 无法在 C++ 中获取 protobuf 示例代码链接步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63625574/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com