2

我有一个项目是通过cmake为MinGW + Qt创建的。 在的CMakeLists.txt我Qt MinGW WIN32到Visual Studio 2010

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

如果我尝试将其编译成2010的VisualStudio我得到下面的连接错误:

MSVCRTD.lib(crtexew.obj) : error LNK2019: undefined reference [email protected] 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(...)(它有一个主要不同的参数)预计。由于你的代码很可能没有这个,你会得到你报告的链接错误。

删除WIN32表示您的可执行文件的默认类型为SUBSYSTEM:CONSOLE,这说明了您的应用程序工作的原因,但显示了控制台。

因此要修复它,请指定WIN32,但将main()更改为WinMain()

+0

像你说的'code'的#ifdef WIN32 INT的WinMain(INT ARGC,CHAR *的argv []) 的#else INT主(INT ARGC,CHAR *的argv [我已经编辑的main()到的WinMain() ]) #endif'code'但我有同样的错误?我在项目中只有一个main() – Treno1

+0

它不仅仅是从'main'到'WinMain'的变化。 “WinMain”有完全不同的论点。 'int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nShowCmd);' – Bart

+0

'int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)'工作!谢谢! – Treno1