SDL2: LNK1561: точка входа должна быть определена
Я хочу скомпилировать этот код:
#include <SDL.h>
int main(int argc, char* argv[]) {
return 0;
}
но это не может быть связано: Error 1 error LNK1561: entry point must be defined
в этой библиотеке есть какой-то странный код:http://hg.libsdl.org/SDL/file/75726efbf679/include/SDL_main.h
#define main SDL_main
также я добавил SDL2.lib;SDL2main.lib
для настройки проекта => Компоновщик = > ввод.
что я могу сделать, чтобы запустить этот проект?
VS 2012 SP3, пустой проект C++.
5 ответов
по данным этой теме на сон.Внутри.Код:
щелкните правой кнопкой мыши имя проекта - > свойства - > развернуть вкладку компоновщика - > система - > подсистема: убедитесь, что это
Console (/SUBSYSTEM:CONSOLE)
кроме того, если вы хотите скрыть окно консоли или отладка многопоточных приложений, вы должны установить подсистему в Window (/SUBSYSTEM:WINDOW)
вместо.
Я нашел эту настройку /ПОДСИСТЕМА: КОНСОЛЬ - это только половина решения. Вторая половина-добавить SDL_MAIN_HANDLED
дополнительные определяет. Ключ, который я использовал для решения этой проблемы, можно найти в SDL_main.h. Настройка SDL_MAIN_HANDLED
сообщите заголовочным файлам SDL, что вы уже предоставили main
функция и не хотите, чтобы она переопределяла свою собственную точку входа.
Как tinky_winki писал
щелкните правой кнопкой мыши имя проекта - > свойства - > развернуть вкладку компоновщика - > System - > SubSystem: убедитесь, что это консоль (/SUBSYSTEM:CONSOLE)
но если вы не ожидаете, что консоли с окном просто использовать /ПОДСИСТЕМА: WINDOWS
НЕ #undef main
! хотя это действительно плохая практика на стороне SDL, чтобы переопределить ее, у них есть веские причины:WinMain
определяется на стороне библиотеки и используется для запуска некоторого кода инициализации, помогая с проблемами совместимости. (еще больше при использовании различных реализаций SDL, таких как Steam или перенос на другие платформы, такие как Android)
так что же делать? Когда на Windows, вы всегда должны включать SDL2main.lib
до SDL2.lib
и убедитесь, что ваш main находится в формат:
int main(int argc, char* argv[]) // CORRECT
void main(int argc, char* argv[]) // WRONG
int main(int, char**) // MAY BE CORRECT
источник: SDL2 Windows FAQ