在QT上安装SDL

时间:2013-12-25 21:12:23

标签: c++ qt sdl

我尝试了近5个小时仍然无法设置在QT上运行helloWorld SDL。请帮我。 1)首先我从站点开发人员包下载 SDL2-devel-2.0.1-mingw.tar.gz(MinGW 32/64位) 还有i686和简单的x86,我需要添加哪些? 我下载这个包

2)然后我添加所有bin,lib,include C:\ Qt的\ Qt5.0.2 \ 5.0.2 \ mingw47_32

我的专业档案:

INCLUDEPATH += $$PWD/../../../../5.0.2/mingw47_32/include

## Glut / OpenGL
unix|win32: LIBS += -L$$PWD/../../../../5.0.2/mingw47_32/lib/ -lglut32
unix|win32: LIBS += -lOPENGL32

当我启动应用时,会收到错误。

C:\Qt\Qt5.0.2\Tools\QtCreator\bin\check_sdl\main.cpp:10: ошибка: undefined reference to `SDL_Init'

在Pro文件中添加行

INCLUDEPATH += "C:\\SDL2-2.0.1\\i686-w64-mingw32\\include"
LIBS += -L"C:\\SDL2-2.0.1\\i686-w64-mingw32\\lib\\" \
-lmingw32\
-libSDL2main.a\
-lSDL2_test.a\

然后错误

:-1: ошибка: cannot find -libSDL2main.a

然而这个文件就在那里。 enter image description here

所以我不知道该怎么做:/

更新:

INCLUDEPATH += "C:\\SDL2-2.0.1\\x86_64-w64-mingw32\\include\\SDL2"
LIBS += -L"C:\\SDL2-2.0.1\\x86_64-w64-mingw32\\bin\\SDL2"

再次未定义SDL Q_Q

更新2:

INCLUDEPATH += C:\SDL2-2.0.1\i686-w64-mingw32\include
LIBS += -L"C:\SDL2-2.0.1\i686-w64-mingw32\lib" \
-lmingw32\
-lSDL2main\
-lSDL2\


#include "SDL2/SDL.h"
using namespace std;

int main()
//int main(int argc, char *argv[])
{
    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );

    SDL_Quit();

    return 0;
}

\Users\slouken\release\SDL\SDL2-2.0.1-source\src\main\windows\SDL_windows_main.c:140: ошибка: undefined reference to `SDL_main'

更新3 现在它正在运行,但在开始时崩溃了)

#include "SDL2/SDL.h"
#include "SDL2/SDL_main.h"
//#include "SDL.h"


#undef main

using namespace std;

//int main()
//int main(int, char**)
int main(int argc, char *argv[])
{
    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );

    cout << "hell";
    int i = 4 +4 ;
    cout << "i is: " << i;

    //Quit SDL
   // SDL_Quit();

   return 0;
}

崩溃错误0x00000135

2 个答案:

答案 0 :(得分:1)

SDL和Qt都提供OpenGL绘图表面 - 为什么在使用Qt时需要SDL?

无论如何,

undefined reference to `SDL_Init'

是一个链接器错误,因为你的标志中有-libSDL2main.a而不是-lSDL2main,所以找不到文件及其符号。

首次更新:

undefined reference to `SDL_main'

这可能是签名不匹配。

您应该使用通常的int main(int, char**)签名声明main函数,因为参数对SDL很重要,因为它试图捕获它们。

检查这个答案: SDL Error Undefined symbols for architecture x86_64 "_SDL_main"

第二次更新:

0x00000135表示 DLL未找到(在运行时)。

您可以使用此工具(http://dependencywalker.com)来检查是否找到了所有库 - 也许某些不满意的mingw支持库依赖性会导致您的程序被终止。

答案 1 :(得分:0)

好的,让我们回答一下我的烦恼。

  1. 我使用了错误的x86_64-w64-mingw32。我需要使用 i686的-W64-的mingw32
  2. 忘记将SDL2.dll添加到C:/ Windows或带有* .exe
  3. 的文件夹中
  4. 右边是“int main(int argc,char * argv [])”
  5. 正确的路径是:

    INCLUDEPATH += C:\SDL2-2.0.1\i686-w64-mingw32\include
    LIBS += -L"C:\SDL2-2.0.1\i686-w64-mingw32\lib" \
    -lmingw32\
    -lSDL2main\
    -lSDL2\
    
  6. 还依赖walker告诉我添加libwinpthread-1.dll,我也是 将其添加到文件夹中。
  7. 谢谢大家的帮助!