当前位置: 首页 > 知识库问答 >
问题:

无法获取C中的protobuf示例代码链接步骤

樊浩初
2023-03-14

我正在尝试编译github源代码中为protobuf提供的示例代码(添加地址,然后以序列化的方式将其发送给另一个反序列化并显示它的程序)。

源代码编译安装成功。(3.13.0版)。

当我尝试编译C示例文件(add\u person.cpp)时,这个问题就开始了。

我在VS 2019中创建了一个空白的C项目,然后粘贴了源代码行,并设置了额外的include路径以包含protobuf安装目录/include,以及protobuf安装目录/lib的额外lib路径。地址簿。proto(来自示例)已编译,并且。cc文件作为附加文件包含在此玩具项目中。代码中已经引用了头文件(.pb.h),并且在编译期间找到了所有包含文件等,没有显示任何错误。

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

"'错误LNK2001未解析的外部符号"私有:无符号的char*__cdeclgoogle::f::io::EpsCopyOutputStream::WriteStringMaybeAliasedOutline(无符号int,类std::basic_string

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

错误LNK2001未解析的外部符号"ulul__cdeclgoogle::的协议f::内部::InitSCCImpl(结构google::协议f::内部::SCCInfoBase *)" (? InitSCCImpl@internal@protobuf@google@YAXPEAUSCCInfoBase@123@@Z)example_protoC:\用户\quasa\source\repos\example_proto\addressbook.pb.obj1

错误LNK2001未解析的外部符号"ull__cdeclgoogle::原型f::内部::VerifyVersion(int, int, char const *)" (? VerifyVersion@internal@protobuf@google@YAXHHPEBD@Z)example_protoC:\用户\quasa\source\repos\example_proto\addressbook.pb.obj1

错误LNK2001未解析的外部符号"ulula__cdeclgoogle::的协议f::内部::AssignDescriptors(结构google::协议f::内部::Descript表const*, bool)"(?AssignDescriptors@internal@protobuf@google@@YAXPEBUDescriptorTable@123@_N@Z)example_protoC:\用户\quasa\source\repos\example_proto\addressbook.pb.obj1

错误LNK2001未解析的外部符号“public:void\u cdecl google::protobuf::internal::LogFinisher::operator=(类google::protobuf::internal::LogMessage

很明显,一些库似乎丢失或没有正确链接。但是,为其他库指定的目录中似乎有3个库。很明显,我对protobuf完全陌生。欢迎提出任何建议。

谢啦

共有1个答案

谢哲瀚
2023-03-14

缺少库,因为您只指定了libdir。您是否确实链接了所需的库?因为指定libdirs(gcc为-L)只是一种方便,所以您可以使用-lmylibname,而不必指定完整路径(请查看本文底部的区别)。

因此,就g指令而言,假设main。o需要与libyour链接。如果lib位于/lib目录中,您可以执行以下操作:

g++ main.o -L/lib

您可以清楚地看到库没有被链接。相反,您必须做的是:

g++ main.o -L/lib -lyour

(链接器正在附加lib)。

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

 类似资料:
  • 问题内容: 这是我要构建的工作流程 使用脚本编译我的原型文件,将生成的src放在指定目录中 链接到Eclipse中生成的类 编译我的项目 我可以很容易地使用Eclipse CDT针对C ++做到这一点:在我的项目中,选择File-> New-> Other,然后在General下选择File。然后,我单击“高级”,然后选择指向系统文件的链接。 不过,我还没有发现如何针对Java执行此操作。一旦回答

  • 问题内容: 我正在尝试构建一个openssl简单程序。这是完整的代码: 我尝试使用以下命令进行编译: 我得到这个: 我在Ubuntu 10.04下。我怎样才能使它工作? 问题答案: 您可能正在尝试静态链接,但是该选项并正在寻找要动态链接的文件。要静态链接到特定库,只需在所有源文件之后在编译器命令行上指定文件即可。 例如,

  • 本文向大家介绍c#自定义Attribute获取接口实现示例代码,包括了c#自定义Attribute获取接口实现示例代码的使用技巧和注意事项,需要的朋友参考一下 一般的接口实现多态 定义接口 定义实现的类 一般实现的方法 升级版 添加自定义(这个网上好多) 实现类 调用方法 这个可以避免需要维护swich语句 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价

  • 本文向大家介绍C# 获取进程退出代码的实现示例,包括了C# 获取进程退出代码的实现示例的使用技巧和注意事项,需要的朋友参考一下 我需要写一个程序,让这个程序知道另一个程序是否正常退出,于是就需要获取这个进程的退出代码 在程序如果需要手动退出,可以设置当前的退出代码 这时的程序运行就退出,同时退出的代码就是 -100 这和 C 语言的在 main 函数返回值一样 在 C# 如果想要实现 C 语言的

  • 这个示例程序将展示如何从一个URL获得一个页面。然后提取页面中的所有链接、图片和其它辅助内容。并检查URLs和文本信息。 运行下面程序需要指定一个URLs作为参数 package org.jsoup.examples; import org.jsoup.Jsoup; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document

  • 本文向大家介绍C/C++中获取数组长度的方法示例,包括了C/C++中获取数组长度的方法示例的使用技巧和注意事项,需要的朋友参考一下 学过C/C++的人都知道,在C/C++中并没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取其长度,那么对于其他类型的数组如何获取他们的长度呢? 其中一种方法是使用sizeof(array) / sizeof(array[0]),