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

Removing console window for Glut/FreeGlut/GLFW?

本文关键字:控制台 窗口 FreeGlut Glut 删除 GLFW      更新时间:2023-10-16

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

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

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

然后我下了:

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

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

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

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

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

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

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

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

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

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

您无需弄乱预处理器定义即可删除控制台窗口。

我知道我的回答晚了几年,但我希望它有所帮助。

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

set_target_properties(exe_name PROPERTIES 
    LINK_FLAGS "/ENTRY:mainCRTStartup /SUBSYSTEM:WINDOWS")

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

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

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

您需要编写一个WinMain入口点并复制现有代码(从main):

int CALLBACK WinMain(
  __in  HINSTANCE hInstance,
  __in  HINSTANCE hPrevInstance,
  __in  LPSTR lpCmdLine,
  __in  int nCmdShow
){
    // ...
}

如果将新项目创建为控制台应用程序,它将始终以控制台应用程序的方式运行。如果要在实际窗口中运行它,则必须创建一个新的 GUI 项目,否则将不包含正确的标头和库。

此外,所需的 WinMain 函数将包含在生成的模板文件中。

当我遇到这样的错误时,我可以通过在链接器"高级"部分、选项"入口点"中输入以下文本来修复它:

主要