Неопределенная ссылка на WinMain (C ++ Mingw) - PullRequest
1 голос
/ 10 октября 2019

В настоящее время я пытаюсь сделать приложение для Windows, используя c ++. Для компиляции моей программы я использую Mingw GCC. Кстати, я на Windows 10. Но как только я использую int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) вместо int main(), компилятор показывает мне следующее сообщение:

C: / mingw-w64 / mingw64 / bin /. ./lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o): crt0_c.c :(. text.startup + 0x2e): неопределенная ссылка на `WinMain 'collect2.exe: ошибка: ld вернул 1 состояние выхода Процесс терминала завершился с кодом выхода: 1

Пример кода, который я пытался скомпилировать, я получил из этого урока приложения для Windows: Пример кода

Я уже пытался переустановить mingw, но это не помогло. Вот почему я надеялся, что кто-то здесь сможет помочь мне с моей проблемой. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

В этом примере кода используется wWinMain, но

Следует отметить, что Visual C ++ поддерживает точку входа «wWinMain», где параметром «lpCmdLine» является «LPWSTR». Обычно вы используете определение препроцессора «_tWinMain» для своей точки входа и объявляете «LPTSTR lpCmdLine», чтобы вы могли легко поддерживать сборки как ANSI, так и Unicode. Однако библиотека запуска MinGW CRT не поддерживает wWinMain, поэтому вам придется придерживаться стандартного «WinMain» и использовать «GetCommandLine ()», если вам нужен доступ к аргументам командной строки.

через Сборка приложений Win32 GUI с MinGW

Используйте взамен WinMain. Эта программа не использует значение pCmdLine, поэтому она должна компилироваться при изменении wWinMain на WinMain и PWSTR pCmdLine на PSTR pCmdLine.

0 голосов
/ 11 октября 2019

неопределенная ссылка на `WinMain '

Он пытается найти WinMain и не удалось. Поэтому вам нужно использовать WinMain вместо wWinMain.

Другая возможная проблема -

ошибка: конфликтующее объявление функции C 'int WinMain (HINSTANCE, HINSTANCE, PWSTR, int) 'int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) ^ ~~~~~~ В файле, включенном в c: \ mingw \ include \ windows.h: 44: 0, из test.cpp: 5:c: \ mingw \ include \ winbase.h: 1263: 14: примечание: предыдущее объявление 'int WinMain (HINSTANCE, HINSTANCE, LPSTR, int)' int APIENTRY WinMain (HINSTANCE, HINSTANCE, LPSTR, int);

Так что вам нужно использовать LPSTR вместо PWSTR.

Тогда точка входа будет выглядеть так:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR pCmdLine, int nCmdShow)

Выше приведена версия ANSIвходная точка.

...