使用clang编译C++(C)后不显示命令行窗口的办法?

RT, 在一开始学c的时候,咱们都知道

#include <stdio.h>
int main(int argc, char *argv[]){
    printf("hello world");
    return 0;
}

上面这个编译出来的main.exe(只说windows平台)是会显示一个黑乎乎的窗口的,但是有时候不需要这个黑色窗口,仅凭快捷键与弹出的通知与用户交互,这时候怎么隐藏这个黑色控制台窗口呢

不同编译器

MSVC

#include <windows.h>
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )

GNU

编译时添加参数 -mwindows 即可

Clang

现在问题来了,clang怎么办呢……

奇技淫巧

使用vbs,bat等其他语言创建一个启动程序,使用windows api启动main.exe……(不予考虑,又丑陋又恶心的实现方案)

最佳答案:用clang-cl,然后抄msvc的
(啥,你的clang没有clang-cl?

-Wl,--subsystem,windows
2 个赞

没有研究过如何添加,不过有一个简单提示:

问题本质是需要指定 PE 可执行文件头部的 Subsystem 字段为 IMAGE_SUBSYSTEM_WINDOWS_GUI(The Windows graphical user interface (GUI) subsystem)。

参考:

你写的不就是控制台应用程序?不显示控制台窗口怎么看结果呢?
而且使用-mwindows时入口点是WinMain,严格说来应该是编译不能通过,而且也不能使用stdin和stdout

1 个赞

Clang’s equivalent to GCC’s -mwindows

2 个赞

添加subsystem:windows会让入口变成mainWindows,也就是从console app变成GUI app,相关的stdin、stdout、stderr通通不会显示。