Мое приложение не запустится, если я не объявлю main как wmain. Это почему? (Visual Studio 19)

Я работал над прототипами приложения, использующего библиотеки 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

См. также:  Ошибка компилятора пользовательского строкового литерала .. не является переменной
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. emredesu

    Проблема была вызвана макросом SDL, который расширяет main до SDL_main. Решение заключалось в том, чтобы использовать

    #undef main
    

    или используйте официальный способ SDL для отмены определения main. Использование wmain показалось, что проблема решена не из-за Unicode зависимости, но поскольку в SDL нет макроса для wmain.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: