0

我使用旧版本的 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 
4

1 回答 1

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

我希望这有帮助!

詹森

于 2014-06-06T18:27:07.423 回答