SDL函数的未定义引用错误

3

我已经尝试了近两天在CodeBlocks中安装SDL 2.0.3,但到目前为止没有成功。

我正在使用最新版本的Codeblocks、MinGW和SDL。

我认为我已经通过在Codeblocks中使用“Settings/Compiler/Search Directories”将lib和include目录中的所有SDL文件正确地包含和链接到代码中。

我还在“Settings/Compiler/Linker Settings/Other Linker Options”中添加了以下行:

-lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer

我已将SDL2.dll添加到项目目录中。

我相信我正在使用正确的SDL文件。我有64位系统,并且我正在使用来自x86_64-w64-mingw32目录的文件,这是根据网络上几篇教程的说法适合64位系统的正确文件。

(当您下载SDL开发库时,有32位和64位系统的版本,因此有两个目录:x86_64-w64-mingw32和i686-w64-mingw32。在我看来,它们的名称非常具有误导性)

我有这个简单的测试代码:

#include <SDL.h>

int main(int argc, char* argv[]) {

    // Start SDL2
    SDL_Init(SDL_INIT_EVERYTHING);

    // Create a Window in the middle of the screen
    SDL_Window *window = 0;

    window = SDL_CreateWindow("Hello World!",
                              SDL_WINDOWPOS_CENTERED,
                              SDL_WINDOWPOS_CENTERED,
                              640, 480,
                              SDL_WINDOW_SHOWN);

    // Delay so that we can see the window appear
    SDL_Delay(2000);

    // Cleanup and Quit
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
} <br>

编译器显示以下内容:

mingw32-g++.exe -LC:\SDL\SDL2_2.0.3\lib -LC:\SDL\SDL2_image_2.0.0\lib -LC:\SDL\SDL2_mixer_2.0.0\lib -o bin\Debug\Snake.exe obj\Debug\main.o  -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer  
obj\Debug\main.o: In function `SDL_main':
D:/CodeBlocks/Snake/main.cpp:6: undefined reference to `SDL_Init'
D:/CodeBlocks/Snake/main.cpp:15: undefined reference to `SDL_CreateWindow'
D:/CodeBlocks/Snake/main.cpp:18: undefined reference to `SDL_Delay'
D:/CodeBlocks/Snake/main.cpp:21: undefined reference to `SDL_DestroyWindow'
D:/CodeBlocks/Snake/main.cpp:22: undefined reference to `SDL_Quit'
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

我跟随了这个教程:https://www.youtube.com/watch?v=wWGtuc5uqF4,但是有些细节已经发生变化。当你下载 SDL 开发库并解压缩它时,它看起来不同,但我认为至少部分正确,因为编译器可以找到<SDL.h>

我知道有几个相同或类似的问题,但没有一个有被接受的答案。 我将非常感谢每一次帮助。

1
尝试使用-m64进行64位编译。 - user1810087
1个回答

1
我发现之前提到的tutorial是为32位版本制作的,所以我尝试使用32位版本,现在一切都正常了

除此之外,您需要获取修复后的SDL_platform.h文件并将其替换旧文件。据我在互联网上找到的信息,这是SDL 2.0.3版本中的错误,应该在更新版本中得到修复。

如果您不这样做,将会出现编译错误,指出有关winapifamily.h的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接