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

如何在Qt中使用MSVC 2015/17从源代码解决Google协议的链接器错误?

南宫鸿晖
2023-03-14

在我们的项目中,除了我们自己的源文件之外,我们还直接包含了几个protobuf源文件。它们在所有平台上都能很好地编译g/clang,在Windows中也能很好地编译Mingw。

由于我们想使用Qt-WebEngine,Mingw没有任何用处,因此我们只能用MSVC编译代码。

现在,在使用MSVC(2015/17,32/64位)编译时,会出现以下性质的链接错误:

错误LNK2001:未解析的外部符号“public:virtual void \uu thiscall google::protobuf::Message::CheckTypeAndMergeFrom(类google::protobuf::MessageLite const

问题:如何修复所有这些链接器错误?

对于感兴趣的人,下面是一组协议源文件,我们将其包含在中。编译时的pro文件:

external/google/protobuf/any.cc \
external/google/protobuf/any.pb.cc \
external/google/protobuf/api.pb.cc \
external/google/protobuf/arena.cc \
external/google/protobuf/arenastring.cc \
external/google/protobuf/descriptor.cc \
external/google/protobuf/descriptor.pb.cc \
external/google/protobuf/descriptor_database.cc \
external/google/protobuf/dynamic_message.cc \
external/google/protobuf/duration.pb.cc \
external/google/protobuf/empty.pb.cc \
external/google/protobuf/extension_set.cc \
external/google/protobuf/extension_set_heavy.cc \
external/google/protobuf/field_mask.pb.cc \
external/google/protobuf/generated_message_reflection.cc \
external/google/protobuf/generated_message_util.cc \
external/google/protobuf/map_field.cc \
external/google/protobuf/message_lite.cc \
external/google/protobuf/reflection_ops.cc \
external/google/protobuf/repeated_field.cc \
external/google/protobuf/source_context.pb.cc \
external/google/protobuf/text_format.cc \
external/google/protobuf/type.pb.cc \
external/google/protobuf/unknown_field_set.cc \
external/google/protobuf/wire_format.cc \
external/google/protobuf/wire_format_lite.cc \
external/google/protobuf/wrappers.pb.cc \
external/google/protobuf/compiler/importer.cc \
external/google/protobuf/compiler/parser.cc \
external/google/protobuf/compiler/plugin.pb.cc \
external/google/protobuf/compiler/subprocess.cc \
external/google/protobuf/compiler/zip_writer.cc \
external/google/protobuf/io/coded_stream.cc \
external/google/protobuf/io/strtod.cc \
external/google/protobuf/io/tokenizer.cc \
external/google/protobuf/io/zero_copy_stream.cc \
external/google/protobuf/io/zero_copy_stream_impl.cc \
external/google/protobuf/io/zero_copy_stream_impl_lite.cc \
external/google/protobuf/message_.cc \
external/google/protobuf/stubs/atomicops_internals_x86_gcc.cc \
external/google/protobuf/stubs/bytestream.cc \
external/google/protobuf/stubs/common.cc \
external/google/protobuf/stubs/int128.cc \
external/google/protobuf/stubs/once.cc \
external/google/protobuf/stubs/status.cc \
external/google/protobuf/stubs/statusor.cc \
external/google/protobuf/stubs/stringpiece.cc \
external/google/protobuf/stubs/stringprintf.cc \
external/google/protobuf/stubs/structurally_valid.cc \
external/google/protobuf/stubs/strutil.cc \
external/google/protobuf/stubs/substitute.cc \
external/google/protobuf/stubs/time_.cc \
external/google/protobuf/util/type_resolver_util.cc \
external/google/protobuf/util/internal/datapiece.cc \
external/google/protobuf/util/internal/field_mask_utility.cc \
external/google/protobuf/util/internal/object_writer.cc \
external/google/protobuf/util/internal/proto_writer.cc \
external/google/protobuf/util/internal/protostream_objectsource.cc \
external/google/protobuf/util/internal/protostream_objectwriter.cc \
external/google/protobuf/util/internal/type_info.cc \
external/google/protobuf/util/internal/utility.cc

共有1个答案

黄信厚
2023-03-14

以下是我如何解决问题的实际观点,请使用相同的方法来解决您的问题。

是否在您的中。pro文件或直接在qmake命令中提供一个LIBS配置变量(要链接到项目的库)。

下面是一个示例:LIBS=-L“c:/vcpkg/packages/openssl-windows\u x64-windows/lib“-llibssl-llibcrypto

要启用此库,需要在路径后提供-l标志。如官方文件所述:

qmake必须存在该库才能找到-llib所在的目录。

这意味着对于上述示例,必须存在以下文件:

  • C:/vcpkg/包/openssl-windows_x64-windows/lib/libssl.lib
  • C:/vcpkg/包/openssl-windows_x64-windows/lib/libcrypto.lib

确保它们存在。

 类似资料:
  • 当我尝试编译测试代码时,我收到链接错误。我在windows 7上使用cygwin。初始步骤如./confiure, make, make test 我还能够生成。pb。抄送和。pb。h使用protoc命令。 但当我试图编译测试代码时,它会出现许多链接错误。我确信这些错误是因为它无法链接到库。 Cygwin在/usr/local/lib中有protobuf静态库和链接库。包含文件位于/usr/loc

  • 我正在尝试将OpenGL与Qt一起使用。我正在遵循这个示例:http://qt-project.org/doc/qt-5.0/qtgui/openglwindow.html使用Qt 5 build for msvc2012。最后我得到了以下错误: 错误LNK2019:未解析的外部符号_imp_glClear@4在函数“public:virtual void _uthiscall OpenGLWin

  • .../... /AndroidStudioProjects/xxxxx/caches/transforms-2/files-2.1/85d86ad1681edc5ad46b44e92265cc70/core-1.7.0/res/values/values.xml C:\用户\srini\AndroidStudioProjects\xxxxx\缓存\变换-2\文件-2.1\85d86ad1681e

  • 我写电子邮件类: 但我只得到了这个错误,我不理解这个错误。这意味着什么以及如何解决 错误:错误:在TCPConnectW连接ECONNREFUSED3.209.246.195:2525rap.after连接[作为完成](net.js:1146: 16){errno:-4078,代码:“ESOCKET”,系统调用:“连接”,地址:“3.209.246.195”,端口:2525,命令:“CONN”}

  • 17.1 CoAP: 嵌入式系统的REST 引自维基百科上的介绍,用的是谷歌翻译。。。 受约束的应用协议(COAP)是一种软件协议旨在以非常简单的电子设备,使他们能够在互联网上进行交互式通信中使用。它特别针对小型低功率传感器,开关,阀门和需要被控制或监督远程,通过标准的Internet网络类似的组件。 COAP是一个应用层协议,该协议是用于在资源受限的网络连接设备,例如无线传感器网络节点使用。 C

  • 我被困在上一周,我无法上传即时应用apk。我发现“您的网站'sptechinfo.000webhostapp.com'尚未通过数字资产链接协议链接到您的应用。请通过数字资产链接协议将您的网站链接到您的应用” 我已经添加了assetlink.jsonAssetLink.json但仍然在Playstore上获得相同的错误。 我从这里验证了链接https://digitalassetlinks.goog