Я пытаюсь использовать c ++, SDL и SDL-образ для создания игры; Я использую Code :: Blocks в качестве своей IDE, и у меня возникли некоторые проблемы.
Я скачал последние файлы разработки mingw SDL и последние файлы разработки mingw SDL-образов.
Я поместил все материалы с SDL-изображениями в тот же каталог, что и SDL (объединяя одно в другое).
Я добавил каталоги x86_64-w64-mingw32 / include и x86_64-w64-mingw32 / lib в мои каталоги поиска Code :: Blocks.
Мои настройки компоновщика следующие:
-lmingw32
-lSDL2main
-lSDL2
-lSDL2_image
-lopengl32
-lglu32
(Очевидно, я также использую openGL, но я не думаю, что это здесь).
У меня есть правильный #include, насколько я могу сказать:
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_opengl.h>
Но я все еще получаю сообщение об ошибке: неопределенная ссылка на IMG_Load
Вот журнал сборки:
obj\Release\gfx_Texture.o:gfx_Texture.cpp:(.text+0xd7): undefined reference to `IMG_Load'
obj\Release\gfx_Texture.o:gfx_Texture.cpp:(.text+0x1dd): undefined reference to `SDL_FreeSurface'
obj\Release\gfx_Texture.o:gfx_Texture.cpp:(.text+0x1f4): undefined reference to `SDL_FreeSurface'
g:/program files(x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: obj\Release\gfx_Texture.o: bad reloc address 0x4 in section `.text.startup'
g:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
И фактический код:
SDL_Surface* image = IMG_Load(file);
Где файл является символом *.
Я понимаю, что в SDL 2.0 произошли некоторые изменения в работе SDL_Surfaces по сравнению с SDL 1.2 (я пытаюсь перейти как с 1.2 на 2.0, так и с MVSC на C :: B), так что может быть что-то делать с этим? Я неправильно использую IMG_Load?
Ваша помощь очень ценится, и я предоставлю любую недостающую информацию по запросу, если она прояснит что-либо.
Еще одна мысль: последняя версия SDL — 2.0.1, а последняя версия SDL_image — 2.0.0. Нужны ли мне эти версии, чтобы соответствовать?
Ну, я не чувствую себя глупым. Когда я работал в MVC, префикс x86 означал 32-битный; по какой-то причине он означает 64-битный в C :: B, а префикс i686 означает 32-битный.
Это происходит, когда программа не выполняет корректную компоновку во время выполнения
например:
asas @ asas: ~ / SDL $ g ++ -Wall SDL_program.cpp -lSDL2
/tmp/cc1eC6CK.o: InfunctionLTexture::loadFromFile(std::__cxx11::basic_string<char,std::char traits<char>, std::allocator<char> >)':
IMG_Load ‘**
SDL_program.cpp:(.text+0x7d): **undefined reference to
Как вы можете видеть выше, пропустите линкер -lSDL2_image.
Возможно также, что у вас есть SDL1.2 и SDL2 в одном корне, и снова блоки кода не связаны правильно