我一直在"未定义的参考WinMain @ 16"在Qt Creator中

时间:2014-03-19 20:12:15

标签: c++ qt linker

我尝试在Qt Creator 3.1中使用SDL 2.0,使用Windows 7中的Qt Build Suite(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:\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

我的.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网站上的一个部分说它是' sa链接器问题,但我在首选项窗口中设置它们,我的猜测是我还需要在.qbs文件中以某种方式设置它们,但我不知道如何这样做。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

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

找到该宏定义,您还可以找到禁用该内容所需的宏符号。

哦,也许这应该是一个评论而不是一个答案,但是如果你发现了(抱歉我没有时间检查这些来源),那么你可以将其标记为“解决方案”,他。 : - )


附录:由于OP亲切地发布了SDL代码,我看了它并发现了这个评论:

  

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

...包括SDL标题之前。

然后没有定义名为main的宏。