2

我正在使用 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"

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

4

3 回答 3

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)
于 2013-08-12T08:21:22.540 回答
6

即使这是一个 Linux 问题,我还是通过谷歌浏览了这篇文章。

也许它可以帮助其他人:我在 Windows XP 32 位代码块上遇到了同样的问题:Mingw + SDL2 并且在我将正确的 SDLFolders(包括,lib...)复制到 mingw 文件夹后修复了它。我陷入这个陷阱的原因是 DEV-Pack 中 SDL-Rootfolder 的命名有点令人困惑。你有一个用于 64 位编译器的“x86_64-w64-mingw32”文件夹和一个用于 32 位编译器的“i686-w64-mingw32”(大多数情况下仍然如此)。由于“x86 ...”命名,我把它搞砸了,仍然不知道他们为什么要这样写。

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

于 2013-11-25T10:03:28.797 回答
0

你确定你的路径中有你的库吗?

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

于 2013-06-30T00:59:21.983 回答