Code :: Blocks SDL2.0“未定义引用'IMG_Load'”

时间:2014-02-09 22:22:59

标签: c++ codeblocks sdl-2 sdl-image

我正在尝试使用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,但我认为这不涉及)。

据我所知,我有正确的#includes:

#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);

其中file是char *。

据我所知,与SDL 1.2相比,SDL_Surfaces在SDL 2.0中的工作方式发生了一些变化(我正在尝试迁移,从1.2到2.0以及从MVSC到C :: B),所以可能与它有关系吗?我使用IMG_Load错了吗?

非常感谢您的帮助,如果有任何说明,我会根据要求提供任何遗漏信息。

还有一个想法:最新版本的SDL是2.0.1,但最新版本的SDL_image是2.0.0。我需要这些版本匹配吗?

3 个答案:

答案 0 :(得分:1)

唔,我不觉得愚蠢。当我在MVC中工作时,x86前缀意味着32位;由于某种原因,它在C :: B中表示64位,而i686前缀表示32位。

答案 1 :(得分:1)

当程序在执行时没有正确链接时发生这种情况

例如: asas @ asas:〜/ SDL $ g ++ -Wall SDL_program.cpp -lSDL2
/tmp/cc1eC6CK.o:Infunction LTexture::loadFromFile(std::__cxx11::basic_string<char,std::char traits<char>, std::allocator<char> >)': SDL_program.cpp:(.text+0x7d): **undefined reference to IMG_Load'**

如您所见,错过了链接器-lSDL2_image。

也可以,SDL1.2和SDL2在同一根,并且代码块没有正确链接

答案 2 :(得分:0)

我遇到了这样的错误,我所做的只是检查我的链接器文本是否正确写入检查您是否输入了“ISDL2_image”而不是“lSDL2_image” (写小'L'然后SDL2而不是大写'I'然后SDL2)对于SDL2项目。 对于 SDL1,只需将“2”更改为“1”。 ?