在Windows上链接MinGW Netbeans 7.0和SDL 2上的项目

时间:2014-02-27 09:25:07

标签: c++ netbeans-7 sdl-2

当我尝试从"传统的openGL"中升级我的图形编程时x" SDL 1.x"到OpenGL3 + x SDL2,我遇到了链接问题。我尝试了许多链接参数,但似乎没有任何效果。

我尝试了SDL1链接参数:链接列表1

-lmingw32 -lSDLmain -lSDL

此代码可以正常使用:代码清单1

#include <SDL2/SDL.h>

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

    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        SDL_Quit();

        return -1;
    }

    SDL_Quit();

    return 0;
}

但是当我像这样添加SDL2代码时:代码列表2

#include <SDL2/SDL.h>

int main(int argc, char **argv)
{   
    SDL_Window* window(0);

    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        SDL_Quit();

        return -1;
    }

    window = SDL_CreateWindow("Test SDL 2.0", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN);

    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

我收到链接错误:错误列表1

g++     -o dist/Debug/MinGW-Windows/sdl2 build/Debug/MinGW-Windows/main.o  -lmingw32 -lSDLmain -lSDL
build/Debug/MinGW-Windows/main.o: In function `SDL_main':
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:21: undefined reference to `SDL_CreateWindow'
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:23: undefined reference to `SDL_DestroyWindow'

collect2.exe: error: ld returned 1 exit status

将链接参数更换为:链接列表2

-lmingw32 -lSDL -lSDLmain

给出了更多的错误(我不会把它们写下来)。添加&#39; 2&#39;这样的参数:链接清单3

-lmingw32 -lSDL2main -lSDL2

给出了比没有2s更多的链接错误:错误列表2

g++     -o dist/Debug/MinGW-Windows/sdl2 build/Debug/MinGW-Windows/main.o  -lmingw32 -lSDL2main -lSDL2
build/Debug/MinGW-Windows/main.o: In function `SDL_main':
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:14: undefined reference to `SDL_Init'
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:16: undefined reference to `SDL_Quit'
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:21: undefined reference to `SDL_CreateWindow'
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:23: undefined reference to `SDL_DestroyWindow'
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:24: undefined reference to `SDL_Quit'
c:/programs/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

好像没有找到单个SDL函数,并且我在lib目录中有库(libSDL2.a,libSDL2.dll.a,libSDL2.la,libSDL2main.a,pkgconfig \ sdl2.pc)。我还尝试在netbeans中使用this set of params关联列表4

$(pkg-config --cflags --libs sdl2)

并没有任何好处。任何人都可以帮我这个。谢谢!

1 个答案:

答案 0 :(得分:0)

问题解决了!我试图解决链接错误。现在一切正常!! LazyFoo's tutorial has the answer“最重要的是包含32位库的i686-w64-mingw32 [...]这很重要:大多数编译器默认仍然编译32位二进制文​​件以最大化兼容性。[...]”。所以我重新提取了相应目录中的所有32位文件。现在一切都像魅力一样。我的猜测是我使用64位libs和32bit mingw编译器。

两个链接params工作正常。这样:

$(pkg-config --cflags --libs sdl2)

或者这个:

-lmingw32 -lSDL2main -lSDL2