SDL2在QtCreator中未定义引用sdl_Main

SDL2 undefined reference sdl_Main in QtCreator

本文关键字:sdl Main 引用 未定义 QtCreator SDL2      更新时间:2023-10-16

我正试图使用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:develSDL2-2.0.3i686-w64-mingw32includeSDL2"
LIBS += -L"D:develSDL2-2.0.3i686-w64-mingw32lib" 
        -lmingw32 
        -mwindows 
        -lSDL2main 
        -lSDL2

主要.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 debug\Piora.exe debug/main.o debug/ui_mainwindow.o debug/moc_ui_mainwindow-o-lglu32-lopeng32-lgdi32-luser32-lqtmind-LD:\devel\SDL2-2.0.3\i686-w64-mingw32\lib-lming32-mwindows-lSDL2main-lSDL2-LD:\dvel\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/sloken/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/sloken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/main/windows/"是从哪里来的,我自己也没有添加路径。

我的理解是SDL_Main提供WinMain,但我希望使用Qt提供的WinMain,因此我定义了SDL_Main_HANDLED定义来停止SDL使用SDL_Main。

附加信息:

  • 操作系统:Windows 8.1 Pro 32位
  • 编译器:MinGW 4.8-Qt安装程序提供的默认编译器
  • 问题:5.2.1
  • SDL 2.0.3-直接从libsdl.org下载,未经修改,没有补丁

将其添加到项目文件中以解决此问题:

win32:QMAKE_LIBS_QT_ENGTRY -= -lqtmain
win32-g++:DEFINES -= QT_NEEDS_QMAIN

CONFIG-= windows
QMAKE_LFLAGS += $$QMAKE_LFLAGS_WINDOWS