Qt链接器在HWND,HDC上出错

时间:2011-04-06 07:14:19

标签: winapi qt gdi

我已加入windows.h。如果我只是评论HWNDHDCHBITMAPGetBitmapBits()等,它甚至可以正常运行。我想我需要包含适当的LIB? LIB包含哪些内容?是-lgdi32 ??

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

EDIT 添加LIBS += -lgdi32后,没有链接器错误,它成功编译。所以它解决了我想!!!!或者是吗?

2 个答案:

答案 0 :(得分:2)

即使你有一个编辑问题的解决方案,我认为说明如何在将来修复这些问题可能会有用。

当链接器发出错误时,这可能意味着您正在尝试引用一段无法找到的可执行代码。在您引用的行之上应该存在一系列错误,指出哪些特定函数导致了问题,例如:

  

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等)只需要相应的头文件;它们没有与之关联的任何实际可执行代码,因此它们不会影响链接器。

答案 1 :(得分:0)

除了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文件的路径。 e.g:

    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"
    }