我已经使用旧版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
答案 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
我希望这有帮助!
詹森