我正在尝试使用c++、SDL和SDL-image来制作游戏;我正在使用Code::Blocks作为我的集成开发环境,我遇到了一些问题。
我已经下载了最新的mingw SDL开发文件和最新的mingw SDL-image开发文件。
我已经将所有SDL-image内容放在与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);其中file是char*。
我了解到与SDL1.2相比,SDL2.0中SDL_Surfaces的工作方式发生了一些变化(我正在尝试从1.2迁移到2.0,以及从MVSC迁移到C::B),所以这可能与此有关吗?我是不是用错了IMG_Load?
您的帮助是非常感谢,我将提供任何遗漏的信息,如果它可以澄清任何东西。
还有一个想法: SDL的最新版本是2.0.1,而SDL_image的最新版本是2.0.0。我需要这些版本才能匹配吗?
发布于 2016-11-03 11:30:22
当程序在执行时没有正确链接时,就会发生这种情况
例如: asas@asas:~/SDL$ g++ -Wall SDL_program.cpp -lSDL2
/tmp/cc1eC6CK.o:无效加载IMG_LTexture::loadFromFile(std::__cxx11::basic_string<char,std::char traits<char>, std::allocator<char> >)': SDL_program.cpp:(.text+0x7d): **undefined reference to‘**
正如你在上面看到的linker -lSDL2_image小姐。
也有可能是SDL1.2和SDL2在同一根目录,但代码块没有正确链接
发布于 2014-02-10 14:48:29
我是不是觉得自己很傻。当我在MVC中工作时,x86前缀表示32位;出于某种原因,它在C::B中表示64位,而i686前缀表示32位。
发布于 2021-01-19 16:37:53
我遇到了这样的错误,我所做的就是检查我的链接器文本是否写得正确,检查您是否为SDL2项目键入了"ISDL2_image“而不是"lSDL2_image”(写小写“L”,然后SDL2不大写“I”,然后是SDL2)。对于SDL1,只需将“2”改为“1”即可。
https://stackoverflow.com/questions/21665866
复制相似问题