Я работал над прототипами приложения, использующего библиотеки SDL и winsock, когда внезапно столкнулся с этой ошибкой при компиляции:
LNK2019 неразрешенный внешний символ main, на который ссылается функция int __cdecl invoke_main (void) (? Invoke_main @@ YAHXZ)
Я попытался изменить параметр «Подсистема» на «Windows» и «Консоль» и т. Д., Но это привело только к той же ошибке с другим сообщением WinMain о неразрешенном внешнем символе. После некоторого исследования я прислушался к совету кого-то изменить основной на wmain и вуаля — приложение работало, как задумано.
Что меня интересует, так это то, что я не менял никаких настроек по умолчанию из Visual Studio, кроме стандарта C ++ (который я изменил с C ++ 11 на C ++ 17), и других моих проектов, в которых есть опция Use Unicode Character Set. включены, работают с обычной функцией main (). Так что именно заставляет меня использовать здесь wmain вместо обычного main?
Согласно эта страница официальная документация Microsoft, main или wmain должна использоваться для /SUBSYSTEM CONSOLE и WinMain или wWinMain должна использоваться для /SUBSYSTEM WINDOWS. — person emredesu schedule 01.11.2020
Я нахожу этот вопрос немного запутанным, но wmain — это точка входа для консольных приложений Unicode. — person emredesu schedule 01.11.2020
Выложите пожалуйста код и настройки сборки. У SDL есть свои подходы к основному (SDL_main, SDL_MAIN_HANDLED, SDL_SetMainReady и т. Д.), И трудно угадать, какой из них вы используете. — person emredesu schedule 01.11.2020
Источник: