Qt:窗口函数是未解析的外部符号

Qt: windows functions are unresolved external symbols

本文关键字:外部 符号 窗口函数 Qt      更新时间:2023-10-16

我正在尝试使用QtCreator中的te WinAPI编译一个简单的类似helloworld的非Qt C++应用程序。代码如下:

#include <windows.h>
int main()
{
    HWND cons = GetConsoleWindow();
    SetWindowText(cons, L"I am the console window");
    MessageBox(cons, L"Hello world!", L"I am the MessageBox", MB_OK | MB_ICONERROR);
    return 0;
}

看起来很简单,但是当我尝试构建它时,编译失败并显示:

main.obj:-1: error: LNK2019: unresolved external symbol __imp__MessageBoxW@16 referenced in function _main
main.obj:-1: error: LNK2019: unresolved external symbol __imp__SetWindowTextW@8 referenced in function _main

开始寻找,我找到了这个,但它根本没有帮助我,因为当我写这篇文章时:

LIBS += -L"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib"

甚至这个:

LIBS += -L"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\shell32.lib"

.pro在我看来,这些"符号"仍然没有解决。每次更改.pro文件内容后,我都运行了 qmake。那么,有什么想法吗?

-L设置DLL的搜索路径,但它实际上并没有链接任何内容。实际链接是通过 -l 完成的。设置系统库的搜索路径不是必需的,但您需要针对 user32 进行链接:

win32:LIBS += -luser32

除了弗兰克的回答(这对我帮助很大,谢谢!我想补充一点,这只是MSVC所必需的,MinGW似乎不需要那条线。这对我来说是最令人困惑的部分,我首先认为我在 msvc 工具链方面遇到了问题。

我的加入现在看起来像这样,以反映这一事实:

msvc: LIBS += -luser32