Проект не работает при SDL2 на c++

Всем привет. Решил сделать проект с SDL2.0.9. Я подключил всё правильно, учёл разрядность, подсистема - консоль. Но проект всё равно выдаёт ошибки LINK2019:

Ошибка LNK2019 ссылка на неразрешенный внешний символ _SDL_Init в функции _SDL_main PREngine D:\VisualStudioProjs\PREngine\PREngine\Main.obj 1
Ошибка LNK2019 ссылка на неразрешенный внешний символ _SDL_GetError в функции _SDL_main PREngine D:\VisualStudioProjs\PREngine\PREngine\Main.obj 1
Ошибка LNK2019 ссылка на неразрешенный внешний символ _main в функции "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) PREngine D:\VisualStudioProjs\PREngine\PREngine\MSVCRTD.lib(exe_main.obj) 1
Ошибка LNK1120 неразрешенных внешних элементов: 2 PREngine D:\VisualStudioProjs\PREngine\Debug\PREngine.exe 1

Вот код:

#include <iostream>

#include <SDL.h>

int main(int argc, char *argv[])
{
    if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
    {
        std::cout << "SDL could not initialise! SDL Error: " << SDL_GetError() << std::endl;
    }

    return EXIT_SUCCESS;
}

Никакой из известных способов решения проблемы не помогает. Как можно это исправить?


Ответы (1 шт):

Автор решения: KoVadim

Это особо хитрые программисты пытаются прогнуть все под себя. Если посмотрите в SDL_main.h, то обнаружите такую строку:

#define main SDL_main

и Ваш main превращается в SDL_main. Естественно, линковщик ничего не может найти, он ведь ищет main для "подсистема - консоль.". Что же делать?

"Правильный быстрый способ":

#include <SDL.h>
#undef main

теперь оно будет как нужно.

Второй способ - использовать WinMain и подсистему windows.

Ещё один способ, вроде как рекомендованный sdl командой, что бы обойти их же багу:

#define SDL_MAIN_HANDLED
#include "SDL.h"

(по этой ссылке пишут о SDL_Init, который в вопросе упоминается. Посмотрите пример на https://wiki.libsdl.org/SDL_SetMainReady , что бы понять, что и куда писать)

И потом все таки убедится, что все линкуется или пойти и почитать известный супер-вопрос-дубликат

P.S. многие думают, что они знают макросы и как лучше... не у всех это получается.

→ Ссылка