带有最新SDL 2.0版本的未定义引用

时间:2013-06-01 16:03:22

标签: c++ sdl codeblocks

我已经使用旧版SDL2了一段时间了,从来没有遇到任何问题;但现在看起来事情没有正确连接,我不明白为什么。

以下是整个计划:

#include <stdlib.h>
#include <stdio.h>
#include <SDL2/SDL.h>

int main(int argc, char *argv[]) {
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Window *win = nullptr;
    SDL_CreateWindow("test", 100, 100, 100, 100, SDL_WINDOW_SHOWN);
    return 0;
}

我正在使用codeblocks + mingw32,这就是我想象的构建日志的相关部分:

mingw32-g++.exe -LE:\...\SDL2-2.0.0\x86_64-w64-mingw32\lib -LE:\Programs\Code-Blocks\lib  -o bin\Debug\SDL2test.exe obj\Debug\main.o -pg -lgmon  -lmingw32 -lSDL2main -lSDL2 -lSDL2.dll -lgdi32 -lwinmm -luser32

以下是错误:

undefined reference to `SDL_Init'
undefined reference to `SDL_CreateWindow'
undefined reference to `WinMain@16'

为了便于比较,这里是几个月前使用SDL2构建编译好的程序的构建日志:

mingw32-g++.exe -LE:\...\SDL2\lib -LE:\Programs\Code-Blocks\lib  -o bin\Debug\SDL2.exe obj\Debug\main.o -lSDL2_image -lSDL2_ttf -pg -lgmon  -lmingw32 -lSDL2main -lSDL2.dll -lSDL2 -lgdi32 -lwinmm -luser32 

1 个答案:

答案 0 :(得分:0)

您的链接器选项看起来不错。

确保您有查找正确目录的代码块。

i686-w64-mingw32用于32位编译。

x86_64-w64-mingw32用于64位编译。

我遇到了同样的问题,我花了很长时间才弄清楚我最初的假设是不正确的。

使用以下目录进行32位编译:

搜索目录:

编译器

C:\Users\USERNAME\Programs\SDL\SDL2-2.0.3\i686-w64-mingw32\include\

C:\Users\USERNAME\Programs\SDL\SDL2_ttf-2.0.12\i686-w64-mingw32\include\

C:\Users\USERNAME\Programs\SDL\SDL2_image-2.0.0\i686-w64-mingw32\include\

链接器

C:\Users\USERNAME\Programs\SDL\SDL2-2.0.3\i686-w64-mingw32\lib

C:\Users\USERNAME\Programs\SDL\SDL2_ttf-2.0.12\i686-w64-mingw32\lib

C:\Users\USERNAME\Programs\SDL\SDL2_image-2.0.0\i686-w64-mingw32\lib

我希望这有帮助!

詹森