我一直在Qt创建器中得到"Undefined reference to WinMain@16"

I keep getting "Undefined reference to WinMain@16" in Qt Creator

本文关键字:Undefined reference to WinMain@16 Qt 创建 我一直在      更新时间:2023-10-16

我试图在Qt Creator 3.1中使用SDL 2.0,在Windows 7中使用Qt构建套件(QBS)。

我已经把链接放在我的。qbs中以定位SDL文件夹,我认为一切正常,因为在我的main.cpp中它识别SDL功能,试图自动完成它们。

问题是,每当我试图编译,我得到'未定义的引用WinMain@16'

我使用MinGW,并在编译器首选项中设置链接器标志为:-lmingw32 -lSDL2main -lSDL2 -mwindows

输出为:

 c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/libmingw32.a(main.o): In function `main':
    e:pgiawsrcpkgmingwrt-4.0.3-1-mingw32-srcbld/../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

和我的。qbs是:

import qbs 1.0
CppApplication {
    name: "testeSDL2"
    cpp.includePaths: [".",
        "C:/SDL2-2.0.3/i686-w64-mingw32/include"]
    cpp.libraryPaths: [
        "C:/SDL2-2.0.3/i686-w64-mingw32/lib"]
    cpp.dynamicLibraries: "SDL2"
    files: [
        "main.cpp"
    ]
    qbsSearchPaths: "C:/CppLibs/"
}

我一直在搜索很多,只找到使用。pro而不是。qbs的常见Qt项目的答案…SDL网站中有一节说这是一个链接器问题,但我在偏好窗口中设置了它们,我猜我还需要在。qbs文件中设置它们,但我不知道怎么做。有人能帮忙吗?

我记得,SDL定义了一个宏main,它扩展为一些SDL特定的函数名。

找到宏的定义,你也可以找到你需要禁用的宏符号。

哦,好吧,也许这应该是一个评论,而不是一个答案,但是当/如果你发现(对不起,我没有时间检查这些来源),那么你可以标记为“解决方案”: -)


附录:自从OP好心地发布了SDL代码,我看了它,发现了这个评论:

如果您提供自己的WinMain(),您可以定义 SDL_MAIN_HANDLED

白马王子;

则未定义名为main的宏