【发布时间】:2014-07-13 18:43:34
【问题描述】:
我正在尝试使用 QtCreator 创建一个包含 SDL2 的项目。但是 SDL 无法正确编译,我看不到错误。
我的 QtCreator .pro 文件
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Psiora
TEMPLATE = app
SOURCES += main.cpp\
ui_mainwindow.cpp
HEADERS += ui_mainwindow.h
FORMS += ui_mainwindow.ui
INCLUDEPATH += "D:\devel\SDL2-2.0.3\i686-w64-mingw32\include\SDL2"
LIBS += -L"D:\devel\SDL2-2.0.3\i686-w64-mingw32\lib" \
-lmingw32 \
-mwindows \
-lSDL2main \
-lSDL2
Main.cpp
#include "ui_mainwindow.h"
#include <QApplication>
#define SDL_MAIN_HANDLED //Let QT Supply WinMain
#include "SDL.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
UI_mainWindow win;
win.show();
return app.exec();
}
编译器错误
g++ -Wl,-subsystem,windows -mthreads -o 调试\Psiora.exe 调试/main.o 调试/ui_mainwindow.o 调试/moc_ui_mainwindow.o -lglu32 -lopengl32 -lgdi32 -luser32 -lqtmaind -LD:\devel \SDL2-2.0.3\i686-w64-mingw32\lib -lmingw32 -mwindows -lSDL2main -lSDL2 -LD:\devel\Qt\5.2.1\mingw48_32\lib -lQt5Widgetsd -lQt5Guid -lQt5Cored
D:\devel\SDL2-2.0.3\i686-w64-mingw32\lib/libSDL2main.a(SDL_windows_main.o):在函数“console_main”中:
/Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/main/windows/SDL_windows_main.c:140:未定义对“SDL_main”的引用 collect2.exe:错误:ld 返回 1 个退出状态
我不明白为什么当 SDL 以正确的顺序链接时,它会给出对 sdl_Main 的未定义引用。当没有这样的路径时,我也不知道“/Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/main/windows/”是从哪里来的我的电脑,也没有自己添加路径。
我的理解是 SDL_Main 提供了 WinMain,但是我希望使用 Qt 提供的 WinMain,所以我定义了 SDL_MAIN_HANDLED 定义以使用 SDL_Main 停止 SDL。
补充资料:
- 操作系统:Windows 8.1 Pro 32bit
- 编译器:MinGW 4.8 - Qt 安装程序提供的默认版本
- Qt:5.2.1
- SDL 2.0.3 - 直接从 libsdl.org 下载,未经修改,没有补丁。
【问题讨论】:
-
你能告诉我们你为什么要混合使用 SDL 和 Qt 吗?
-
我用SDL写了一个完整的模拟器,使用了SDL的2D跨平台渲染、时序和声音特性。现在我正在尝试添加一个界面和对话框窗口,目的是将 SDL 视频输出重定向到 QWidget,让我保留所有原始代码。
-
如果我从 .pro 和 main.cpp 文件中完全删除 QT 的所有痕迹。它编译和链接很好。
-
行“#include
”有所不同。取消注释可以让它编译得很好。也许这与试图提供 WinMain 的 QT 和 SDL 有关? -
是的,Qt 会将其扩展为 qMain,而 WinMain 将找不到它。
标签: c++ qt sdl qt-creator qmake