【发布时间】:2014-03-19 20:12:15
【问题描述】:
我正在尝试在 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 站点中有一个部分说这是一个链接器问题,但我将它们设置在首选项窗口,我的猜测是我还需要在 .qbs 文件中以某种方式设置它们,但我不知道如何去做。有人可以帮忙吗?
【问题讨论】:
-
你100%确定你有一个主函数被链接吗?
-
是的,如果我从 main.cpp 中删除 #include
它将完美编译 -
这很奇怪,因为 main 函数仍然存在两次。这有帮助吗? stackoverflow.com/questions/17048072/… 似乎需要一个
-lSDLmain,不管这里翻译成什么。 -
我在搜索错误时看到了该线程。我确实将链接器标志放在了 mingw 偏好窗口中,就像那样。我也为此尝试了 Code::Blocks ,显然它在那里工作,但不适用于 Qt 与 QBS ......这就是为什么我认为它与这些链接器标志相关的东西也需要在 .qbs 文件中......