You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用cl编译器编译Windows Gtk3 C程序时隐藏控制台窗口

在Windows上用Visual Studio cl编译器编译Gtk3程序消除控制台窗口的解决方案

问题场景

Windows 11(x86_64)环境下,因mingw/MSYS2表现不稳定,改用Visual Studio自带的原生cl编译器编译C语言编写的Gtk3程序(依赖gvsbuild脚本构建的Gtk3库)。程序通过编译器响应文件配置编译链接选项后可成功编译,但运行时会弹出后台控制台窗口。

尝试过的无效方案

  • 链接时指定/SUBSYSTEM:WINDOWS,编译器报错找不到被Gtk隐藏的WinMain入口
  • 尝试/D"subsystem,windows"、/Dmwindows、/Dsubsystem=gui等预定义宏,无法消除控制台窗口
  • 添加Windows API代码尝试隐藏控制台,编译器找不到相关代码定义

原始测试代码

#include <gtk/gtk.h>

static void activate (GtkApplication * app, gpointer user_data)
{
  GtkWidget * window;

  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Hello internet from Gtk Windows!");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
  gtk_widget_show_all (window);
}

int main (int argc, char ** argv)
{
  GtkApplication * app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}

解决方法

通过以下修改即可解决问题:

  1. 链接选项中指定/SUBSYSTEM:WINDOWS
  2. 修改程序入口为WinMain,并做跨平台兼容处理
  3. 调用g_application_run时将argc参数设为0(若程序无需处理命令行参数则无影响)

修改后的代码如下:

#include <gtk/gtk.h>

static void activate (GtkApplication * app, gpointer user_data)
{
  GtkWidget * window;

  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Hello internet from Gtk Windows!");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
  gtk_widget_show_all (window);
}

#ifdef _WIN32
int WinMain (void * hInstance, void * hPrevInstance, char ** argv, int nCmdShow)
#else
int main (int argc, char ** argv)
#endif
{
  GtkApplication * app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), 0, argv);
  g_object_unref (app);

  return status;
}

内容的提问来源于stack exchange,提问作者Will B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:36:42