Qt MinGW WIN32 到 Visual Studio 2010

Posted

技术标签:

【中文标题】Qt MinGW WIN32 到 Visual Studio 2010【英文标题】:Qt MinGW WIN32 to Visual Studio 2010 【发布时间】:2012-08-30 09:26:33 【问题描述】:

我有一个通过 cmake 为 MinGW + Qt 创建的项目。 在 CMakeLists.txt 我有

add_executable (project-name WIN32 $MOC_SRCS $HEADERS $SOURCES $RESOURCES $QtApp_RCC_SRCS)

如果我尝试将其编译到 VisualStudio 2010 中,我会收到以下链接器错误:

MSVCRTD.lib(crtexew.obj) : error LNK2019: undefined reference _WinMain@16 in func ___tmainCRTStartup

然后我擦除WIN32

add_executable (project-name $MOC_SRCS $HEADERS $SOURCES $RESOURCES $QtApp_RCC_SRCS)

该项目可以编译并且工作正常,但是我有一个带有 Qt 窗口的控制台窗口。如何禁用控制台?

【问题讨论】:

【参考方案1】:

在 add_executable 中使用WIN32 意味着您的应用程序将属于SUBSYSTEM:WINDOWS 类型。也就是说,不需要控制台的应用程序。如果指定了这个,那么,而不是 main(...),应该是 WinMain(...)(它与 main 有不同的参数)。由于您的代码很可能没有此功能,因此您会收到报告的链接器错误。

删除WIN32 意味着您的可执行文件将是默认类型SUBSYSTEM:CONSOLE,这解释了为什么您的应用程序可以工作,但会显示一个控制台。

所以要修复它,请指定WIN32,但将您的main() 更改为WinMain()

【讨论】:

我已经将 main() 编辑为 WinMain() 就像你说的 code#ifdef WIN32 int WinMain(int argc, char *argv[]) #else int main(int argc, char * argv[]) #endifcode 但我有同样的错误?我在项目中只有一个 main() 这不仅仅是从mainWinMain 的变化。 WinMain 有完全不同的论点。 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd ); int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 工作!谢谢!

以上是关于Qt MinGW WIN32 到 Visual Studio 2010的主要内容,如果未能解决你的问题,请参考以下文章

在 Win32Proj 中将 Qt 与 Visual Studio (C++) 集成

Windows 的 QT5.3 安装程序抛出错误“不是有效的 win32 应用程序”

我是win7 64位的系统,下载了Qt 5.2.1 for Windows 32-bit (MinGW 4.8, OpenGL, 634 MB)请安装过的大神

win7 QT +opencv环境搭建

TestDisk 之Qt creator + MinGW +Qt +gdb

win8 下qt5.8 mingw 打包的exe要怎么在xp上运行