Ответ 1
вот что я нашел здесь:
Щелкните правой кнопкой мыши по имени проекта → Свойства → Развернуть вкладку Linker → System → SubSystem: убедитесь, что это консоль (/SUBSYSTEM: CONSOLE)
Я хочу скомпилировать этот код:
#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
в Project Settings = > Linker = > Input.
Что я могу сделать для запуска этого проекта?
VS 2012 SP3, пустой проект на С++.
вот что я нашел здесь:
Щелкните правой кнопкой мыши по имени проекта → Свойства → Развернуть вкладку Linker → System → SubSystem: убедитесь, что это консоль (/SUBSYSTEM: CONSOLE)
Я обнаружил, что настройка /SUBSYSTEM: CONSOLE - это только половина решения. Вторая половина - добавить SDL_MAIN_HANDLED
к вашим дополнительным определениям. Ключ, который я использовал для решения этой проблемы, можно найти в SDL_main.h. Установка SDL_MAIN_HANDLED
сообщит файлы заголовков SDL, которые вы уже предоставили main
, и не хотите переопределять свою собственную точку входа.
Как пишет tinky_winki
Щелкните правой кнопкой мыши на имени проекта → Свойства → Развернуть вкладку Линкера → System → SubSystem: убедитесь, что это консоль (/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 FAQ по Windows