Неопределенная ссылка на функции SDL

Я пытаюсь установить SDL 2.0.3 в CodeBlocks почти два дня, но пока безуспешно.

Я использую последнюю версию Codeblocks, MinGW и SDL.

Я думаю, что я правильно включил и связал все файлы SDL из каталогов lib и include в кодовые блоки, используя Settings/Compiler/Search Directories в кодовых блоках.

Я также добавил следующую строку в Настройки / Компилятор / Настройки компоновщика / Другие параметры компоновщика:

-lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer


Я добавил SDL2.dll в каталог проекта.

Я считаю, что использую правильные файлы SDL. У меня 64-разрядная система, и я использую файлы из каталога x86_64-w64-mingw32. Что должно быть правильным для системы 64, согласно нескольким руководствам в Интернете.

(Когда вы загружаете библиотеки разработки SDL, есть версии для 32- и 64-разрядных систем, поэтому есть два каталога: x86_64-w64-mingw32 и i686-w64-mingw32 < / em> Их имена, на мой взгляд, вводят в заблуждение)

У меня есть этот простой тестовый код:

#include <SDL.h>

int main(int argc, char* argv[]) {

    // Start SDL2
    SDL_Init(SDL_INIT_EVERYTHING);

    // Create a Window in the middle of the screen
    SDL_Window *window = 0;

    window = SDL_CreateWindow("Hello World!",
                              SDL_WINDOWPOS_CENTERED,
                              SDL_WINDOWPOS_CENTERED,
                              640, 480,
                              SDL_WINDOW_SHOWN);

    // Delay so that we can see the window appear
    SDL_Delay(2000);

    // Cleanup and Quit
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
} <br>

А компилятор мне говорит следующее:

mingw32-g++.exe -LC:\SDL\SDL2_2.0.3\lib -LC:\SDL\SDL2_image_2.0.0\lib -LC:\SDL\SDL2_mixer_2.0.0\lib -o bin\Debug\Snake.exe obj\Debug\main.o  -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer  
obj\Debug\main.o: In function `SDL_main':
D:/CodeBlocks/Snake/main.cpp:6: undefined reference to `SDL_Init'
D:/CodeBlocks/Snake/main.cpp:15: undefined reference to `SDL_CreateWindow'
D:/CodeBlocks/Snake/main.cpp:18: undefined reference to `SDL_Delay'
D:/CodeBlocks/Snake/main.cpp:21: undefined reference to `SDL_DestroyWindow'
D:/CodeBlocks/Snake/main.cpp:22: undefined reference to `SDL_Quit'
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status



Я следовал этому руководству: https://www.youtube.com/watch?v=wWGtuc5uqF4
Все немного изменилось, потому что когда вы загружаете библиотеку разработки SDL и распаковываете ее. Это выглядит иначе, но я считаю, что сделал это хотя бы частично правильно, потому что компилятор может найти <SDL.h>

Я знаю, что есть несколько одинаковых или знакомых вопросов, но ни один из них не принял ответ.

Буду признателен за любую помощь.


person Rokusjar    schedule 05.10.2014    source источник
comment
Попробуйте -m64 для 64-битной компиляции.   -  person user1810087    schedule 05.10.2014


Ответы (1)


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

За исключением того, что вам нужно получить исправленную версию SDL_platform.h файла и заменить старую на него. Это ошибка в SDL версии 2.0.3, которая должна быть исправлена ​​в новых версиях в соответствии с тем, что я нашел в Интернете.

Если вы этого не сделаете, вы получите ошибку компиляции, говорящую о winapifamily.h

person Rokusjar    schedule 05.10.2014