SDL2无法正常链接

时间:2013-06-30 00:44:13

标签: c++ linker sdl codeblocks

我正在使用Code :: Blocks,这是我的代码:

#include "SDL2/SDL.h"
int main(int argc, char* args[]) {
    SDL_Init( SDL_INIT_EVERYTHING );
    SDL_Quit();
    return 0;
}

我正在建设:

mingw32-g++.exe -o C:\..\main.exe C:\..\main.o  -lmingw32 -lSDL2main -lSDL2

得到那个:

undefined reference to "SDL_Init"
undefined reference to "SDL_Quit"

我很确定链接器会找到libs导致如果我将它们更改为随机抱怨“找不到任何东西”。

3 个答案:

答案 0 :(得分:6)

有点晚了,但我在Linux上偶然发现了类似的问题。

这会导致链接器错误:

g++ $(pkg-config --cflags --libs sdl2) sdl2test.cpp 

sdl2test.cpp:(.text+0x11): undefined reference to `SDL_Init'
sdl2test.cpp:(.text+0x20): undefined reference to `SDL_GetError'
sdl2test.cpp:(.text+0x34): undefined reference to `SDL_Quit'

这有效:

g++ sdl2test.cpp $(pkg-config --cflags --libs sdl2)

答案 1 :(得分:6)

即使这是一个Linux问题,我也是通过谷歌来发布这篇文章。

Mayb它可以帮助其他人:我遇到了与Windows XP 32位代码块相同的问题:Mingw + SDL2并且我在将正确的SDLFolders(包括,lib ...)复制到mingw文件夹后修复了它。我陷入这种pifall的原因是,DEV-Pack中SDL-Root文件夹的命名有点令人困惑。你有一个用于64位编译器的“x86_64-w64-mingw32”-Folder和用于32位编译器的“i686-w64-mingw32”(就像moste一样)。由于“x86 ......”的命名,我搞砸了,但仍然不知道为什么他们这样写。

覆盖正确的文件后,它对我来说很好。

答案 2 :(得分:0)

您确定自己的路径中有图书馆吗?

尝试将-LC:/whatever/与实际包含您libSDL2.a的文件夹和其他*.a添加到编译器的参数中。