删除 Glut/FreeGlut/GLFW 的控制台窗口
Removing console window for Glut/FreeGlut/GLFW?
在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 函数将包含在生成的模板文件中。
当我遇到这样的错误时,我可以通过在链接器、"高级"部分、选项"入口点"中输入以下文本来修复它:
主要
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- 如何获取控制台窗口的宽度?
- 在C++中隐藏键盘记录器的控制台窗口
- C++ 如何在 OpenGL 程序中远程调用控制台窗口
- 为什么调试时没有显示控制台窗口
- 有没有办法像动画一样移动控制台窗口?
- 如何在C++中居中输出控制台窗口
- 控制台窗口未在开发C++中打开?即使也有 getch() ?
- QTextEdit 提升为构建控制台窗口
- 如何拒绝一个叫做的过程以写入继承的控制台窗口
- Visual C 关闭文本文件和打开新的控制台窗口
- 有没有办法为使用 Boost 生成的进程创建新的控制台窗口
- C++:显示控制台窗口的输出
- C++:如何在控制台窗口中显示结果
- (C++)控制台窗口保持立即关闭,即使我在Visual Studio中是CTRL + F5
- 如何在调用系统()时隐藏控制台窗口
- 在控制台窗口关闭(在Windows上)上优雅地关闭命令行应用程序
- C++控制台窗口放在前面
- C++/CLI 项目如何在控制台窗口中显示消息