我想在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; }
看起来很简单,但是当我试图build立它时,编译失败:
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