首页 > 解决方案 > 在 CodeBlocks 中编译 SDL2 的问题

问题描述

我正在尝试编译简单的代码:

#include <iostream>
#include <SDL2/SDL.h>

int main(int argc, char *argv[])
{

}

但它给了我很多血腥的错误:

    ||=== Build: Debug in aa (compiler: GNU GCC Compiler) ===|
E:\SDL2\SDL2-2.0.12\i686-w64-mingw32\lib\libSDL2main.a(SDL_windows_main.o)||In function `main_getcmdline':|
\Users\valve\release\SDL\SDL2-2.0.12-source\foo-x86\..\src\main\windows\SDL_windows_main.c|55|undefined reference to `SDL_calloc'|
\Users\valve\release\SDL\SDL2-2.0.12-source\foo-x86\..\src\main\windows\SDL_windows_main.c|60|undefined reference to `SDL_wcslen'|
\Users\valve\release\SDL\SDL2-2.0.12-source\foo-x86\..\src\main\windows\SDL_windows_main.c|60|undefined reference to `SDL_iconv_string'|
E:\SDL2\SDL2-2.0.12\i686-w64-mingw32\lib\libSDL2main.a(SDL_windows_main.o)||In function `OutOfMemory':|
\Users\valve\release\SDL\SDL2-2.0.12-source\foo-x86\..\src\main\windows\SDL_windows_main.c|28|undefined reference to `SDL_ShowSimpleMessageBox'|
E:\SDL2\SDL2-2.0.12\i686-w64-mingw32\lib\libSDL2main.a(SDL_windows_main.o)||In function `main_getcmdline':|
\Users\valve\release\SDL\SDL2-2.0.12-source\foo-x86\..\src\main\windows\SDL_windows_main.c|68|undefined reference to `SDL_SetMainReady'|
\Users\valve\release\SDL\SDL2-2.0.12-source\foo-x86\..\src\main\windows\SDL_windows_main.c|75|undefined reference to `SDL_free'|
\Users\valve\release\SDL\SDL2-2.0.12-source\foo-x86\..\src\main\windows\SDL_windows_main.c|77|undefined reference to `SDL_free'|
||error: ld returned 1 exit status|
||=== Build failed: 8 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

我不明白为什么当库本身似乎正在工作时它会给我取消定义随机函数,但是唉。

我现在所做的事情是

标签: c++linkersdl

解决方案


您的链接器和编译器标志可能是错误的。要获得正确的编译器标志,请使用:

pkg-config --cflags sdl2

要获取所需的链接标志:

pkg-config --libs sdl2

如果你没有 pkg​​-config,那么你可以使用sdl2-configSDL 自带的工具:

sdl2-config --cflags

和:

sdl2-config --libs

通常,您会将这些命令添加到构建系统中。我不知道 CodeBlocks 是如何工作的,以及它是否可以做到这一点。也许您可以将这些命令添加为“标志”,但使用反引号,如下所述:

http://forums.codeblocks.org/index.php?topic=21561.0


推荐阅读