删除Glut/FreeGlut/GLFW的控制台窗口?

Joh*_*han 8 c++ configuration glut freeglut glfw

在Visual C++下,我玩过Glut/FreeGlut/GLFW.似乎这些项目的每个人都默认添加了一个CMD窗口.我尝试将其移除:

属性 - > C/C++ - >预处理器 - >预处理器定义

从这里,我删除_CONSOLE并将其替换为_WINDOWS

然后我去了:

属性 - >连接器 - >系统 - >子系统

我将选项设置为Windows(/ SUBSYSTEM:WINDOWS)

然后当我尝试在GLFW下编译时,我得到以下构建错误:

  • 错误1错误LNK2001:未解析的外部符号_WinMain @ 16 MSVCRT.lib

  • 错误2致命错误LNK1120:1未解析的外部glfwWindow.exe

是否可以删除控制台窗口?

小智 18

在链接器选项下,将入口点设置为mainCRTStartup.此函数执行MS libc的必要设置,然后调用main.

  • 结合你的答案,@ Emre为我工作! (6认同)
  • 与 @Emre 的答案相结合就像一个魅力。谢谢。 (2认同)

小智 12

我的项目只有一个main,(没有WinMain)并禁用控制台,我只是将Linker-> System-> SubSystem设置为" Windows (/SUBSYSTEM:WINDOWS)"而不是" Console (/SUBSYSTEM:CONSOLE)",控制台就会消失.

您无需使用预处理器定义来删除控制台窗口.

我知道我的答案是迟了几年,但我希望它有所帮助.

  • 我试过了,但在 VS2015 中它给出了一个链接器错误:未解析的外部符号 WinMain 在函数“int __cdecl invoke_main(void)”中引用 (2认同)

小智 8

大多数链接器支持自动删除控制台启动代码的选项.

我认为在GCC上它被称为-mwindows


Sea*_*rds 7

非控制台Windows应用程序使用WinMain()入口点约定.您的Glut示例可能使用标准C main()约定.

如果您只想为演示应用程序快速修复,WinAPI函数FreeConsole()可能会有所帮助.

MSDN:http://msdn.microsoft.com/en-us/library/ms683150( v = vs.85).aspx

  • 好吧,你在其他平台上确实没有同样的问题,所以我建议将FreeConsole()包装在#ifdef WIN32/#endif块中. (2认同)

小智 7

要使用 cmake 摆脱控制台,可以按如下方式设置链接标志:

set_target_properties(exe_name PROPERTIES 
    LINK_FLAGS "/ENTRY:mainCRTStartup /SUBSYSTEM:WINDOWS")
Run Code Online (Sandbox Code Playgroud)