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 ++ проект.

16

Решение

В соответствии с эта тема на Dream.In.Code:

Щелкните правой кнопкой мыши на имени проекта -> Свойства -> Разверните вкладку Linker -> Система -> Подсистема: убедитесь, что это Console (/SUBSYSTEM:CONSOLE)

В качестве альтернативы, если вы хотите скрыть окно консоли или отладка многопоточного приложения, Вы должны установить Подсистему в Window (/SUBSYSTEM:WINDOW) вместо.

41

Другие решения

Я нашел эту настройку / SUBSYSTEM: CONSOLE это только половина решения. Вторая половина добавить SDL_MAIN_HANDLED к вашим дополнительным определениям. Ключ, который я использовал для решения этой проблемы, можно найти в SDL_main.h. настройка SDL_MAIN_HANDLED скажите заголовочные файлы SDL, которые вы уже предоставили main функционировать и не желать, чтобы он переопределил свою собственную точку входа.

3

Как tinky_winki писал

Щелкните правой кнопкой мыши на имени проекта -> Свойства -> Разверните вкладку Linker ->
Система -> Подсистема: убедитесь, что это Консоль (/ SUBSYSTEM: CONSOLE)

Но если вы не ожидаете консоли с окном, просто используйте, / SUBSYSTEM: WINDOWS

2

НЕ #undef main! хотя на стороне SDL очень плохая практика переопределять его, у них есть веские причины: WinMain определяется на стороне библиотеки и используется для запуска некоторого кода инициализации, что помогает с проблемами совместимости. (еще больше при использовании различных реализаций SDL, таких как Steam или портирование на другие платформы, такие как Android)

Итак, что нужно делать? Когда в Windows, вы всегда должны включать SDL2main.lib до SDL2.lib и убедитесь, что ваш основной формат:

int main(int argc, char* argv[]) // CORRECT
void main(int argc, char* argv[]) // WRONG
int main(int, char**) // MAY BE CORRECT

Источник: SDL2 Windows FAQ

2

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

0
По вопросам рекламы [email protected]