2013-10-24 2 views
3

Я пытаюсь скомпилировать простое приложение helloorld, подобное не Qt C++, используя te WinAPI в QtCreator. Вот код:Qt: функции windows являются нерешенными внешними символами

#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 [email protected] referenced in function _main 
main.obj:-1: error: LNK2019: unresolved external symbol [email protected] referenced in function _main 

Я начал искать, и я нашел this, но это WASN «т помогает мне на всех, потому что, когда я написал это:

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, эти «символы» по-прежнему остаются нерешенными. Я запустил qmake после каждое изменение на .pro -файл. Итак, какие-то идеи?

+0

Вы определенно пропустить связь с библиотекой Windows. Может быть, 'user32.lib'? – vahancho

ответ

8

-L устанавливает пути поиска для библиотек DLL, но на самом деле он ничего не связывает. Фактическое связывание выполняется через -l. Настройка пути поиска для системных библиотек не должно быть необходимым, но вам нужно связать против user32: (!, Который помог мне очень, спасибо за это)

win32:LIBS += -luser32 
+0

Спасибо, это сработало для меня. Что делает win32: префикс? – Netherwire

+0

Это делает остальную часть линии Windows (в случае, если вы когда-либо захотите построить свой проект где-то в другом месте) –

3

В дополнение к ответу Фрэнка я хотел бы добавьте, что это требуется только для MSVC, MinGW, похоже, не нуждается в этой строке. Что для меня было самой запутанной частью, я сначала подумал, что у меня проблемы с программной цепочкой msvc.

Мое включение теперь выглядит следующим образом, чтобы отразить этот факт:

msvc: LIBS += -luser32 
Смежные вопросы