Я хочу скомпилировать этот код:
#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 ++ проект.
В соответствии с эта тема на Dream.In.Code:
Щелкните правой кнопкой мыши на имени проекта -> Свойства -> Разверните вкладку Linker -> Система -> Подсистема: убедитесь, что это
Console (/SUBSYSTEM:CONSOLE)
В качестве альтернативы, если вы хотите скрыть окно консоли или отладка многопоточного приложения, Вы должны установить Подсистему в Window (/SUBSYSTEM:WINDOW)
вместо.
Я нашел эту настройку / SUBSYSTEM: CONSOLE это только половина решения. Вторая половина добавить SDL_MAIN_HANDLED
к вашим дополнительным определениям. Ключ, который я использовал для решения этой проблемы, можно найти в SDL_main.h. настройка SDL_MAIN_HANDLED
скажите заголовочные файлы SDL, которые вы уже предоставили main
функционировать и не желать, чтобы он переопределил свою собственную точку входа.
Как tinky_winki писал
Щелкните правой кнопкой мыши на имени проекта -> Свойства -> Разверните вкладку Linker ->
Система -> Подсистема: убедитесь, что это Консоль (/ SUBSYSTEM: CONSOLE)
Но если вы не ожидаете консоли с окном, просто используйте, / SUBSYSTEM: WINDOWS
НЕ #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
Проект >> Свойства >> Компоновщик >> Дополнительно >> Точка входа = главная
и применить