C语言:在 Win 10 上,g++ 如何编译 gtk 应用程序


Windows 10 上使用 g++(或 gcc)编译基于 GTK 的 C 语言程序是完全可行的,且相比 Tcc 更为推荐,因为 g++(GNU 编译器套件)对 GTK 的支持更加完善,配置也更简单。以下是详细步骤和注意事项:


国内阿里镜像下载 msys2-x86_64-latest.exe

1. 环境准备

(1) 安装 MSYS2

MSYS2 是 Windows 上的类 Unix 开发环境,提供包管理器 pacman,可方便安装 GTK 和编译工具。

  • 下载并安装 MSYS2。
  • 更新软件包:
    pacman -Syu
    
(2) 安装 GTK3 开发库

在 MSYS2 终端中运行:

pacman -S mingw-w64-x86_64-gtk3

Total Download Size: 93.21 MiB
Total Installed Size: 677.30 MiB

(3) 安装 g++ 或 gcc

根据需要安装 MinGW-w64 工具链(包含 g++ 和 gcc):

pacman -S mingw-w64-x86_64-toolchain

:: There are 13 members in group mingw-w64-x86_64-toolchain:
:: Repository mingw64
···

  1. mingw-w64-x86_64-binutils 2) mingw-w64-x86_64-crt-git 3) mingw-w64-x86_64-gcc
  2. mingw-w64-x86_64-gdb 5) mingw-w64-x86_64-gdb-multiarch 6) mingw-w64-x86_64-headers-git
  3. mingw-w64-x86_64-libmangle-git 8) mingw-w64-x86_64-libwinpthread-git
  4. mingw-w64-x86_64-make 10) mingw-w64-x86_64-pkgconf 11) mingw-w64-x86_64-tools-git
  5. mingw-w64-x86_64-winpthreads-git 13) mingw-w64-x86_64-winstorecompat-git
    ···
    Enter a selection (default=all): 3.mingw-w64-x86_64-gcc
    Total Download Size: 63.01 MiB
    Total Installed Size: 507.50 MiB

2. 编写示例代码

创建一个 C 语言文件 app.c,内容如下:

#include <gtk/gtk.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window), "GTK on Windows");g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);gtk_widget_show_all(window);gtk_main();return 0;
}

3. 编译命令

(1) 使用 pkg-config 简化编译

GTK 依赖的头文件和库路径可通过 pkg-config 自动获取:

gcc -o app.exe app.c $(pkg-config --cflags --libs gtk+-3.0)
  • 说明
    • gcc:C 编译器(若代码为 C++,可替换为 g++)。
    • $(pkg-config ...):自动填充 GTK 的头文件路径和链接库。
    • -o app.exe:指定输出文件名。
(2) 手动指定路径(备用)

pkg-config 不可用,需手动指定路径(不推荐):

gcc -o app.exe -IC:/msys64/mingw64/include/gtk-3.0 -IC:/msys64/mingw64/include/glib-2.0 ... app.c -LC:/msys64/mingw64/lib -lgtk-3 -lgdk-3 ... 

4. 运行程序

  • 编译生成的 app.exe 需要依赖 GTK 的 DLL 文件(如 libgtk-3-0.dll)。
  • 解决方法
    1. 将 DLL 文件从 C:\msys64\mingw64\bin 复制到 app.exe 所在目录。
    2. 或将 C:\msys64\mingw64\bin 添加到系统环境变量 PATH 中。

5. 常见问题

  • 报错 pkg-config not found
    确保已安装 pkg-config

    pacman -S mingw-w64-x86_64-pkg-config
    
  • 头文件或库缺失
    检查 GTK 是否安装正确,路径是否与编译命令中的 -I-L 参数匹配。

  • C 与 C++ 的混用问题

    • 若代码是纯 C 语言,建议使用 gcc
    • 若代码包含 C++ 特性(如类、模板),需使用 g++,并将文件扩展名改为 .cpp

6. 替代方案

  • 使用集成开发环境(IDE)
    • VS Code + GTK 插件。
    • Code::Blocks 配置 GTK 项目。

总结

  • 完全可行:g++/gcc 在 Windows 10 上编译 GTK 应用是标准做法,推荐使用 MSYS2 管理依赖。
  • 优势
    • 自动依赖管理(通过 pkg-config)。
    • 支持完整的 C/C++ 标准和 GTK 特性。
  • 适用场景:从简单示例到大型 GTK 项目均可胜任。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

84.评论日记

原链接 这个视频我发了四五条评论。评论内容甚至和下面这个视频内的其他评论一样。 找了另外的账号也发了。 发现&#xff0c;无论是我这个账号&#xff0c;还是其他的账号&#xff0c;评论都无法看到。 我大胆猜测有一种机制&#xff0c;某些官号会被设置成一种高检测的等…

【RabbitMQ】整合 SpringBoot,实现工作队列、发布/订阅、路由和通配符模式

文章目录 工作队列模式引入依赖配置声明生产者代码消费者代码 发布/订阅模式引入依赖声明生产者代码发送消息 消费者代码运行程序 路由模式声明生产者代码消费者代码运行程序 通配符模式声明生产者代码消费者代码运行程序 工作队列模式 引入依赖 我们在创建 SpringBoot 项目的…

Python-92:最大乘积区间问题

问题描述 小R手上有一个长度为 n 的数组 (n > 0)&#xff0c;数组中的元素分别来自集合 [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]。小R想从这个数组中选取一段连续的区间&#xff0c;得到可能的最大乘积。 你需要帮助小R找到最大乘积的区间&#xff0c;并输出这…

windows触摸板快捷指南

以下是结构化整理后的触控手势说明&#xff0c;采用清晰的层级划分和标准化表述&#xff1a; **触控手势操作规范****1. 单指操作****2. 双指操作****3. 三指操作****4. 四指操作** **优化说明&#xff1a;** 触控手势操作规范 1. 单指操作 手势功能描述等效操作单击滑动选择…

VSCode launch.json 配置参数详解

使用 launch.json 配置调试环境时&#xff0c;会涉及到多个参数&#xff0c;用于定义调试器的行为和目标执行环境。以下是一些常用的配置参数&#xff1a; 1、"type" &#xff1a;指定调试器的类型&#xff0c;例如 "node" 表示 Node.js 调试器&#xff0…

mAP、AP50、AR50:目标检测中的核心评价指标解析

在目标检测任务中&#xff0c;评价指标是衡量模型性能的核心工具。其中&#xff0c;mAP&#xff08;mean Average Precision&#xff09;、AP50&#xff08;Average Precision at IoU0.5&#xff09;和AR50&#xff08;Average Recall at IoU0.5&#xff09;是最常用的指标。本…

【论文阅读】A Survey on Multimodal Large Language Models

目录 前言一、 背景与核心概念1-1、多模态大语言模型&#xff08;MLLMs&#xff09;的定义 二、MLLMs的架构设计2-1、三大核心模块2-2、架构优化趋势 三、训练策略与数据3-1、 三阶段训练流程 四、 评估方法4-1、 闭集评估&#xff08;Closed-set&#xff09;4-2、开集评估&…

[已解决] LaTeX “Unicode character“ 报错 (中文字符处理)

问题&#xff1a; 写 LaTeX 文档&#xff0c;特别是包含中文时&#xff0c;经常遇到类似下图的 “Unicode character XXXXXX” 报错 (X) Unicode character 本 (U672C) LaTeX [行 xx, 列 x] (X) Unicode character 报 (U62A5) LaTeX [行 xx, 列 x] ...这通常意味着我们的 LaTe…

现货黄金跌破 3160 美元,市场行情剧烈波动​

在 5 月 16 日的交易时段中&#xff0c;现货黄金市场出现戏剧性变化&#xff0c;价格短时间内大幅跳水。截至当日 20:04&#xff0c;现货黄金短线下挫 20 美元&#xff0c;一举跌破 3160 美元 / 盎司&#xff0c;日内跌幅达 2.56%&#xff1b;纽约期金日内也大跌 2%&#xff0c…

智慧校园(含实验室)智能化专项汇报方案

该方案聚焦智慧校园(含实验室)智能化建设,针对传统实验室在运营监管、环境监测、安全管控、排课考勤等方面的问题,依据《智慧校园总体框架》等标准,设计数字孪生平台、实验室综合管理平台、消安电一体化平台三大核心平台,涵盖通信、安防、建筑设备管理等设施,涉及 395 个…

【Python爬虫 !!!!!!政府招投标数据爬虫项目--医疗实例项目文档(提供源码!!!)!!!学会Python爬虫轻松赚外快】

政府招投标数据爬虫项目--医疗实例项目文档 1. 项目概述1.1 项目目标1.2 技术栈2. 系统架构2.1 模块划分2.2 流程示意图3. 核心模块设计3.1 反爬处理模块(`utils/anti_crawler.py`)3.1.1 功能特性3.1.2 关键代码3.2 爬虫模块(`crawler/spiders/`)3.2.1 基类设计(`base_spi…

RabbitMQ是什么?应用场景有哪些?

RabbitMQ 是一款开源的消息代理中间件,基于 AMQP(高级消息队列协议)实现,用于在分布式系统中进行异步通信和消息传递。它通过将消息的发送者和接收者解耦,提高了系统的可扩展性、可靠性和灵活性。 核心特点 多协议支持:不仅支持 AMQP,还兼容 STOMP、MQTT 等多种消息协议…

RT Thread FinSH(msh)调度逻辑

文章目录 概要FinSH功能FinSH调度逻辑细节小结 概要 RT-Thread&#xff08;Real-Time Thread&#xff09;作为一款开源的嵌入式实时操作系统&#xff0c;在嵌入式设备领域得到了广泛应用。 该系统不仅具备强大的任务调度功能&#xff0c;还集成了 FinSH命令行系统&#xff0c…

我司助力高校打造「智慧创新AI学习中心」

为推动AI教育融合跨领域应用&#xff0c;东吴大学于2025年4月举行「智慧创新AI学习中心」揭牌仪式&#xff0c;并宣布正式启动AI特色课程与教学空间建置计画。此次建置由我司协助整体教室空间与设备规划&#xff0c;导入最新NVIDIA GeForce RTX 50系列桌上型电脑&#xff0c;并…

给你的matplotlib images添加scale Bar

​Scale Bar&#xff08;比例尺&#xff09;用于直观表示图像与实际物理尺寸&#xff08;如微米、毫米等&#xff09;的对应关系。例如&#xff0c;在显微镜图像中&#xff0c;比例尺可以标注“75μm”表示图中某线段对应的实际长度。 这里分享使用matplotlib中的imshow结合ma…

基于React的高德地图api教程004:线标记绘制、修改、删除功能实现

文章目录 4、线绘制4.1 绘制线标记4.1.1 开启线标记绘制模式4.1.2 绘制线标记4.1.3 关闭线标记模式4.2 可视化线标记数据面板4.3 修改线标记4.3.1 修改线标记路径4.3.2 修改线标记名称和颜色4.4 删除线标记4.5 定位线标记4.6 代码下载4.04、线绘制 4.1 绘制线标记 4.1.1 开启…

lc42接雨水

1.原题 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 2.题目解析 这一题是经常被考到的一道算法题&#xff0c;其中最简单最好用的方法就是双指…

【读代码】端到端多模态语言模型Ultravox深度解析

一、项目基本介绍 Ultravox是由Fixie AI团队开发的开源多模态大语言模型,专注于实现音频-文本的端到端实时交互。项目基于Llama 3、Mistral等开源模型,通过创新的跨模态投影架构,绕过了传统语音识别(ASR)的中间步骤,可直接将音频特征映射到语言模型的高维空间。 核心优…

力扣HOT100之二叉树:98. 验证二叉搜索树

这道题之前也刷过&#xff0c;自己做了一遍&#xff0c;发现卡在了第70多个样例&#xff0c;才发现自己没有利用二叉搜索树的性质&#xff0c;但凡涉及到二叉搜索树&#xff0c;应该首先考虑中序遍历&#xff01;&#xff01;&#xff01; 被卡住的测试样例是这样的&#xff1a…

Centos7.9同步外网yum源至内网

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum makecache yum repolist安装软件 yum install -y yum-utils createrepo # yum-utils包含re…