【发布时间】:2020-03-28 08:17:58
【问题描述】:
我试图删除在使用常规 main 函数启动 c++ 程序时打开的控制台窗口,并在编译调试时仍然保留它,以便我可以将输出发送到控制台。 为了测试这一点,我使用了一个使用 OpenGL 4.6 编写的简单引擎。
我最终做的是这个(我使用的是 windows 和 msvc 编译器):
使用编译器选项
/DDEBUG编译调试版如果未设置调试标志,则在我的主源文件中添加
/SUBSYSTEM:windows /ENTRY:mainCRTStartup的编译指示。
#ifndef DEBUG
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#endif
现在最终发生的事情是,在调试模式下一切正常,但在发布模式下,我的应用程序窗口不显示,它只是创建了一个在后台运行的进程,我必须手动杀死它。 如果我以管理员身份运行它,该应用程序在发布模式下运行良好。
因此问题:
为什么它在发布模式下需要管理员权限(无终端),但在终端中不需要管理员权限? 我该如何解决这个问题?我宁愿我的应用程序不需要管理员权限才能运行。
【问题讨论】:
-
你能不能把
#ifndef DEBUG去掉,这样你就有了和Release一样的应用程序,然后尝试调试应用程序?当没有管理员权限时,由于控制台不存在,可能 OpenGL 会抛出一些您看不到的错误 -
这通常被认为是错误的形式——你的程序不需要决定这个;你启动程序的方式可以。
-
@RoQuOTriX 这是个好主意,我会试试的。
-
@UKMonkey 对不起,但我无法从您的评论中找出什么是不好的形式。
-
@DJSchaffner 让您的二进制文件决定如何处理控制台。如果从控制台运行会发生什么?你期望会发生什么?正确的做法是,与其尝试更改程序来控制它的启动方式,不如先找到启动程序的方式,然后再进行更改。
标签: c++ windows opengl compilation