未定义参考SDL功能

时间:2014-10-05 10:48:47

标签: c++ sdl codeblocks sdl-2

我试图在CodeBlocks中设置SDL 2.0.3将近两天,但到目前为止还没有运气。

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

我想我已经在Codeblocks中使用Settings/Compiler/Search Directories正确地将 lib include 目录中的所有SDL文件包含并链接到代码块中。

我还在设置/编译器/链接器设置/其他链接器选项中添加了以下行:

-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 个答案:

答案 0 :(得分:0)

我意识到,我之前提到的 tutorial 是针对32位版本所以我尝试使用32位版本和所有内容现在正在工作

除非您需要获得SDL_platform.h文件的固定版本并将其替换为旧版本。这是SDL版本2.0.3中的一个错误,应根据我在互联网上找到的内容在新版本中修复。

如果你不这样做,你会得到编译错误,说winapifamily.h