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

问题描述 投票:0回答:9

在 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

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

c++ configuration glut freeglut glfw
9个回答
21
投票

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


12
投票

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

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


12
投票

我的项目只有一个

main
(没有
WinMain
)并且要禁用控制台,我只需将链接器->系统->子系统设置为“
Windows (/SUBSYSTEM:WINDOWS)
”而不是“
Console (/SUBSYSTEM:CONSOLE)
”,控制台就会消失。

您不需要弄乱预处理器定义来删除控制台窗口。

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


7
投票

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

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

5
投票

非控制台 Windows 应用程序使用

WinMain()
入口点约定。您的 Glut 示例可能使用标准 C
main()
约定。

如果您只想快速修复演示应用程序,WinAPI 函数

FreeConsole()
可能会有所帮助。

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


1
投票

您需要编写一个

WinMain
入口点并复制现有代码(来自
main
):

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

0
投票

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

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


0
投票

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

主要


0
投票

以下是如何在

Visual Studio
下解决该问题的详细说明,无需重写代码:

  1. 打开项目属性窗口
  2. 保留 Debug 配置不变,控制台非常适合调试
  3. Release 配置下,转到 Linker->All Options
  4. 入口点设置为mainCRTStartup
  5. 子系统下选择Windows: /SUBSYSTEM:WINDOWS
  6. 点击应用保存设置

现在您可以在使用控制台的调试配置或不使用控制台的发布配置下编译项目。您可以以任何常见形式使用输入功能:

int main() {}

int main(int argc, char** argv) {}

我个人更喜欢第二种。感谢Chaoelmindreda,我给你们投票了!

© www.soinside.com 2019 - 2024. All rights reserved.