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


проект > > свойства > > Компоновщик > > дополнительно > > точка входа = главная и применить