【问题标题】:Qt linker Error on HWND, HDCHWND、HDC 上的 Qt 链接器错误
【发布时间】:2011-04-06 07:14:19
【问题描述】:

我已包含windows.h。如果我只是注释掉HWNDHDCHBITMAPGetBitmapBits() 等,它甚至工作得很好。我想我需要包含正确的 LIB ?包含什么 LIB?是-lgdi32??

错误信息: :: error: collect2: ld returned 1 exit status

编辑 添加LIBS += -lgdi32 后没有链接器错误,它编译成功。所以我认为它解决了!!!!还是?

【问题讨论】:

  • 你的问题至少应该包含错误信息。
  • 好吧,我认为这是一个众所周知的问题。我添加了错误消息。请检查编辑
  • 与其将解决方案编辑到您的问题中,不如将其添加为您问题的答案。您可以接受自己的答案,尤其是在您解决了自己的问题之后。此外,您在问题中输入的错误信息非常模糊;只是说一个错误,而不是错误是什么。有关@Friend-Pal 要求的示例,请参阅下面的答案。
  • 不幸的是,这是编译器触发的唯一错误消息。如果编译器触发 very vague 错误消息,我该怎么办?

标签: winapi qt gdi


【解决方案1】:

即使您在编辑问题时有解决方案,但我认为说明将来如何解决此类问题可能会很有用。

当链接器给出错误时,这可能意味着您正在尝试引用一段它无法找到的可执行代码。在您引用的行上方应该有一系列错误,说明哪些特定功能导致了问题,例如:

foo.obj: 错误 LNK2019: 函数中引用的未解析的外部符号 _GetBitmapBits@12...

对于您的特定链接器,输出可能略有不同。它可能包括“未解决的外部”一词。这些错误正是@Friend-Pal 实际要求的。

当您获得未解析的外部引用时,您可以通过链接到相应的库来修复它。要确定为哪个函数包含哪个库,请查看文档。例如,GetBitmapBits 的文档位于底部:

最低支持客户端:Windows 2000 Professional
支持的最低服务器:Windows 2000 Server
头文件:Wingdi.h(包括 Windows.h)
库:Gdi32.lib
DLL:Gdi32.dll

添加库引用的方法取决于您使用的特定链接器。在您的情况下,根据对您问题的编辑,应该是 -lgdi32 以链接到 gdi32.lib 库。

重复此过程,直到解决所有引用。

数据类型(HWNDHDCHBITMAP等)只需要相应的头文件即可;它们没有任何与它们关联的实际可执行代码,因此它们不会影响链接器。

【讨论】:

  • 谢谢。我不知道为什么编译器没有触发 Single unresolved reference 错误。然后我做了一个疯狂的猜测,认为 windows.h 函数可能会导致问题。
【解决方案2】:

除了 Tadmas 关于查找 MSDN 以查看您需要哪个库的回答之外,在使用 Qt 时,您可以在不更改链接器标志等的情况下定义库。

  • 如果您使用 Microsoft 的编译器,将例如 LIBS += Gdi32.lib 行添加到 .pro 文件就足够了。完成!

  • 如果您使用的是 GCC,则应提供 lib 文件的完整路径,例如 LIBS += "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib/Gdi32.lib"

  • 如果您有一个同时针对 32 位和 64 位 GCC 构建的项目(并且您已经在 Windows 上使用 64 位 GCC 构建了 Qt),您应该在 .pro 文件中使用条件作用域 determine if you are building for 32-bit or 64-bit并提供 64 位版本中 64 位 lib 文件的路径。例如:

    win32-g++:!contains(QMAKE_HOST.arch, x86_64) {
        LIBS += "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib/Gdi32.lib"
    } else {
        LIBS += "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib/x64/Gdi32.lib"
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2016-08-10
    • 2023-03-21
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多