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

时间:2013-10-24 14:40:36

标签: c++ windows qt winapi qt-creator

我试图在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

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

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中,这些&#34;符号&#34;仍然没有得到解决。我在每次更改之后运行qmake到.pro - 文件内容。那么,有什么想法吗?

2 个答案:

答案 0 :(得分:9)

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

win32:LIBS += -luser32

答案 1 :(得分:4)

除了弗兰克的答案之外(这对我非常有帮助,谢谢!)我想补充一点,这只是MSVC所要求的,MinGW似乎并不需要那条线。这对我来说是最令人困惑的部分,我首先想到的是我遇到了msvc工具链的问题。

我现在的包含似乎是为了反映这一事实:

msvc: LIBS += -luser32