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