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

Undefined references with latest SDL 2.0 build

本文关键字:未定义 引用 版本 SDL 最新      更新时间:2023-10-16

我使用旧版本的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.0x86_64-w64-mingw32lib -LE:ProgramsCode-Blockslib  -o binDebugSDL2test.exe objDebugmain.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:...SDL2lib -LE:ProgramsCode-Blockslib  -o binDebugSDL2.exe objDebugmain.o -lSDL2_image -lSDL2_ttf -pg -lgmon  -lmingw32 -lSDL2main -lSDL2.dll -lSDL2 -lgdi32 -lwinmm -luser32 

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

确保你的代码块在正确的目录中。

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

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

我和你有同样的问题,我花了很长时间才发现我最初的假设是错误的。

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

搜索目录:

编译器

C:UsersUSERNAMEProgramsSDLSDL2-2.0.3i686-w64-mingw32include
C:UsersUSERNAMEProgramsSDLSDL2_ttf-2.0.12i686-w64-mingw32include
C:UsersUSERNAMEProgramsSDLSDL2_image-2.0.0i686-w64-mingw32include

链接器

C:UsersUSERNAMEProgramsSDLSDL2-2.0.3i686-w64-mingw32lib
C:UsersUSERNAMEProgramsSDLSDL2_ttf-2.0.12i686-w64-mingw32lib
C:UsersUSERNAMEProgramsSDLSDL2_image-2.0.0i686-w64-mingw32lib

我希望这对你有帮助!

Jensen