2013-06-01 32 views
0

我一直在使用旧版本的SDL2一段时间,并且从来没有任何问题;但现在看起来事情没有正确链接,我不知道为什么。未定义的引用与最新的SDL 2.0版本

这里就是整个程序:

#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; 
} 

我使用的代码块+ 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 `[email protected]' 

为了比较起见,这里是编译fin的程序的编译日志e使用几个月前的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 
+0

尝试用'-shared'标志建立。 – jepugs

回答

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 

我希望这有助于!

Jensen