undefined引用带有Code :: Blocks的SDL

时间:2014-05-08 04:40:29

标签: c++ gcc linker sdl undefined

我正在关注如何将SDL与Code :: Blocks一起使用的http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/codeblocks/index.php教程,因为我在我尝试过的每一个该死的IDE中都遇到了麻烦。

该教程非常简单,它在第7步说明 “我们必须告诉编译器链接库。转到链接器设置并粘贴-lmingw32 -lSDL2main -lSDL2”。我做到了那一点。然后它说如果你得到一堆未定义的引用错误,你搞砸了这一步,我真的没有看到我怎么可能弄乱这一步,因为这是一个简单的步骤。

我真的很想开始使用MinGW和Code :: Blocks。 可能有助于解决此问题的信息:

  1. 我的MinGW目录位于我的C:
  2. 我的C:目录中有一个文件夹SDL,在该文件夹中我通过右键单击项目属性并添加目录,将包含和lib文件从SDL链接到Code :: BLocks。这一切似乎都运行正常。包括目录= C:\ SDL \ SDL2-2.0.3 \ x86_64-w64-mingw32 \ include \ SDL2 Lib Directory = C:\ SDL \ SDL2-2.0.3 \ x86_64-w64-mingw32 \ lib中
  3. 如上所述,在链接器设置 - >其他链接器选项:我写了-lmingw32 -lSDL2main -lSDL2,但是我得到了一堆引用错误。我不知道该尝试什么,我一直在网上搜索几个小时,我甚至更换了SDL_platform.h,因为它导致了问题,并且未定义的引用仍然存在。
  4. 请帮忙。这是我用来检查SDL是否正常工作的代码,但事实并非如此。

    #include "SDL.h"
    #include <iostream>
    #include <cstdio>
    #include <Windows.h>
    
    int main( int argc, char* argv[])
    {
        // Fire up SDL, this starts all subsystems; audio video etc.
    
        if ( SDL_Init(SDL_INIT_EVERYTHING) < 0 ) {
            fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
            exit(1);
        }
        // Now Shut it down
        atexit(SDL_Quit);
    
        return 0;
    }
    

    这些是我得到的错误:

    -------------- Build:在TITLE中调试(编译器:GNU GCC编译器)---------------

    mingw32-g++.exe -Wall -g -IC:\SDL\SDL2-2.0.3\x86_64-w64-mingw32\include\SDL2 -c C:\Users\Bryan\Desktop\CodeBlocks\TITLE\main.cpp -o obj\Debug\main.o
    mingw32-g++.exe -LC:\SDL\SDL2-2.0.3\x86_64-w64-mingw32\lib -o bin\Debug\TITLE.exe obj\Debug\main.o  -lmingw32 -lSDL2main -lSDL2  
    obj\Debug\main.o: In function `SDL_main':
    C:/Users/Bryan/Desktop/CodeBlocks/TITLE/main.cpp:10: undefined reference to `SDL_Init'
    C:/Users/Bryan/Desktop/CodeBlocks/TITLE/main.cpp:11: undefined reference to `SDL_GetError'
    C:/Users/Bryan/Desktop/CodeBlocks/TITLE/main.cpp:15: undefined reference to `SDL_Quit'
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/libmingw32.a(main.o): In function `main':
    e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
    collect2.exe: error: ld returned 1 exit status
    Process terminated with status 1 (0 minute(s), 0 second(s))
    4 error(s), 0 warning(s) (0 minute(s), 0 second(s))
    

1 个答案:

答案 0 :(得分:1)

您已创建Windows可执行项目。该向导将入口点设置为WinMain。您的代码实现了一个以main(int argc, char**argv)为入口点的命令行程序。

如果您想继续使用main,则应创建一个新的命令行项目并添加 源文件到这个项目。您可以尝试更改项目类型。

对于SDL错误,您应该检查,您使用匹配的编译器和库(32对64位)。