it-roy-ru.com

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
DmitryR

Согласно этой теме на Dream.In.Code:

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

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

40
4pie0

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

3
dpiron

НЕ#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
Gustavo Maciel

Как писал tinky_winki

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

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

2
Łukasz Mleczko

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

0
Michał Rugbuś