当前位置: 首页 > article >正文

C语言:在 Win 10 上,gcc 如何编译 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
–4) mingw-w64-x86_64-gdb 5) mingw-w64-x86_64-gdb-multiarch 6) mingw-w64-x86_64-headers-git
–7) mingw-w64-x86_64-libmangle-git 8) mingw-w64-x86_64-libwinpthread-git
–9) mingw-w64-x86_64-make 10) mingw-w64-x86_64-pkgconf 11) mingw-w64-x86_64-tools-git
–12) 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 简化编译

用 MSYS2 MINGW64 终端
which gcc
which 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)。
    $ ./app.exe
  • 解决方法
    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 项目均可胜任。

相关文章:

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

在 Windows 10 上使用 g&#xff08;或 gcc&#xff09;编译基于 GTK 的 C 语言程序是完全可行的&#xff0c;且相比 Tcc 更为推荐&#xff0c;因为 g&#xff08;GNU 编译器套件&#xff09;对 GTK 的支持更加完善&#xff0c;配置也更简单。以下是详细步骤和注意事项&#xf…...

阿里云CMH镜像迁移与SMC整机迁移对比及功能详解(同地域跨主体账号场景)

文章目录 一、核心功能对比​二、CMH镜像迁移操作流程​​1.资源调研​​​​​​2.镜像共享​​​​3.​​迁移验证​​​​4.限制​​&#xff1a; 三、SMC整机迁移操作流程​​1.​​迁移源导入​​​​2.​​任务配置​​​​3.​​增量同步​​​​4.​​应用验证​​​​…...

用vue和go实现登录加密

前端使用CryptoJS默认加密方法&#xff1a; var pass CryptoJS.AES.encrypt(formData.password, key.value).toString()使用 CryptoJS.AES.encrypt() 时不指定加密模式和参数时&#xff0c;CryptoJS 默认会执行以下操作 var encrypted CryptoJS.AES.encrypt("明文&quo…...

政府数据开放试点企业如何抢占特许经营协议黄金席位

首席数据官高鹏律师团队 《中共中央办公厅 国务院办公厅关于 加快公共数据资源开发利用的意见》的落地&#xff0c;标志着数据从“封闭管理的行政资源”正式转变为“可流通的市场要素”。但机遇与风险从来是一枚硬币的两面——特许经营协议的黄金席位背后&#xff0c;隐藏着…...

CSS 锚点滑动效果的技术

CSS 锚点滑动效果的技术 引言 介绍锚点滑动效果的概念及其在网页设计中的重要性。简要说明 基本锚点链接 如何使用HTML中的<a>标签创建基本的锚点链接。示例代码&#xff1a; <a href"#section1">跳转到第一部分</a> <div id"section…...

mac-M系列芯片安装软件报错:***已损坏,无法打开。推出磁盘问题

因为你安装的软件在Intel 或arm芯片的mac上没有签名导致。 首先打开任何来源操作 在系统设置中配置&#xff0c;如下图&#xff1a; 2. 然后打开终端&#xff0c;输入&#xff1a; sudo spctl --master-disable然后输入电脑锁屏密码 打开了任何来源&#xff0c;还遇到已损坏…...

Echart地图数据源获取

DataV.GeoAtlas地理小工具系列 选择需要的区域地图,选中后输出即可: 地图钻取代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>map</title><style>html, body, #map{margin: 0;…...

GNSS数据自动化下载系统的设计与实现

摘要 本文详细介绍了三种不同设计的GNSS数据自动化下载系统&#xff0c;分别针对IGS观测数据、GRACE-FO Level-1B数据以及通过代理服务器获取数据的需求场景。系统采用Python实现&#xff0c;具备断点续传、完整性校验、异常处理和进度显示等核心功能。实验结果表明&#xff0…...

MySQL 中 JOIN 和子查询的区别与使用场景

目录 一、JOIN:表连接1.1 INNER JOIN:内连接1.2 LEFT JOIN:左连接1.3 RIGHT JOIN:右连接1.4 FULL JOIN:全连接二、子查询:嵌套查询2.1 WHERE 子句中的子查询2.2 FROM 子句中的子查询2.3 SELECT 子句中的子查询三、JOIN 和子查询的区别3.1 功能差异3.2 性能差异3.3 使用场…...

【深度学习-Day 12】从零认识神经网络:感知器原理、实现与局限性深度剖析

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

谈谈未来iOS越狱或巨魔是否会消失

2024年10月的预测&#xff0c;先说结论&#xff1a; 巨魔iOS17.1消失概率为99%。 因为巨魔强依赖的漏洞就是一个签名漏洞&#xff0c;攻击面有限又经过2轮修复&#xff0c;第3次出现漏洞的概率极低。而越狱的话由于系统组件和服务较多&#xff0c;所以出现漏洞概率高攻击面多&…...

Unity3D仿星露谷物语开发43之农作物生长

1、目标 把防风草种子种在地里&#xff0c;并展示植物种子&#xff0c;防风草种子将随着时间变化而生长成植株。 2、创建Crop.cs脚本 在Assets -> Scripts下创建新的目录命名为Crop&#xff0c;在其下创建新的脚本命名为Crop.cs。 代码如下&#xff1a; using System.C…...

从0到1上手Kafka:开启分布式消息处理之旅

目录 一、Kafka 是什么 二、Kafka 的基础概念 2.1 核心术语解读 2.2 工作模式剖析 三、Kafka 的应用场景 四、Kafka 与其他消息队列的比较 五、Kafka 的安装与配置 5.1 环境准备 5.2 安装步骤 5.3 常见问题及解决 六、Kafka 的基本操作 6.1 命令行工具使用 6.1.1 …...

GTS-400 系列运动控制器板卡介绍(三十四)---运动程序多线程累加求和

运动控制器函数库的使用 运动控制器驱动程序、dll 文件、例程、Demo 等相关文件请通过固高科技官网下载,网 址为:www.googoltech.com.cn/pro_view-3.html 1 Windows 系统下动态链接库的使用 在 Windows 系统下使用运动控制器,首先要安装驱动程序。在安装前需要提前下载运动…...

Python爬虫如何应对网站的反爬加密策略?

在当今的互联网环境中&#xff0c;网络爬虫已经成为数据采集的重要工具之一。然而&#xff0c;随着网站安全意识的不断提高&#xff0c;反爬虫技术也越来越复杂&#xff0c;尤其是数据加密策略的广泛应用&#xff0c;给爬虫开发者带来了巨大的挑战。本文将详细介绍Python爬虫如…...

第一次经历项目上线

这几天没写csdn&#xff0c;因为忙着项目上线的问题&#xff0c;我这阶段改了非常多的前端bug哈哈哈哈&#xff0c;说几个比较好的bug思想&#xff01; 这个页面算是我遇到的比较大的bug&#xff0c;因为我一开始的逻辑都写好了&#xff0c;询价就是在点击快递公司弹出弹框的时…...

Conda配置完全指南——Windows系统Anaconda/Miniconda的安装、配置、基础使用、清理缓存空间和Pycharm/VSCode配置指南

本文同步发布在个人博客&#xff1a; Conda配置完全指南Conda 是一个开源的跨平台包管理与环境管理工具&#xff0c;广泛应用于数据科学、机器学习及 Python 开发领域。它不仅能帮助用户快速安装、更新和卸载第三方库&#xff0c;还能创建相互隔离的虚拟环境&#xff0c;解决不…...

Quasar组件 Carousel走马灯

通过对比两个q-carousel组件来&#xff0c;了解该组件的属性 官方文档请参阅&#xff1a;Carousel 预览 源代码 <template><div class"q-pa-md"><div class"q-gutter-md"><q-carouselv-model"slide"transition-prev&quo…...

AI日报 - 2024年5月17日

&#x1f31f; 今日概览 (60秒速览) ▎&#x1f916; 大模型前沿 | OpenAI推出自主编码代理Codex&#xff1b;Google DeepMind发布Gemini驱动的编码代理AlphaEvolve&#xff0c;能设计先进算法&#xff1b;Meta旗舰AI模型Llama 4 Behemoth发布推迟。 Codex能并行处理多任务&…...

R语言数据框(datafram)数据的构建及简单分析

代码完成的功能&#xff1a; 创建数据集&#xff08;数据框&#xff09;&#xff0c; 写入到文件中&#xff0c; 显示数据&#xff0c; 分组计算平均年龄&#xff0c; 在Rstudio中&#xff0c;创建R markdown或R notebook文件运行。以下是添加了注释的完整R代码&#xff0…...

风控域——风控决策引擎系统设计

摘要 本文详细介绍了风控决策引擎系统的设计与应用。决策引擎系统是一种智能化工具&#xff0c;可自动化、数据驱动地辅助或替代人工决策&#xff0c;广泛应用于金融、医疗、营销、风控等领域。文章阐述了决策引擎的核心功能&#xff0c;包括自动化决策、动态规则管理、实时处…...

CAPL Class: TcpSocket (此类用于实现 TCP 网络通信 )

目录 Class: TcpSocketacceptopenclosebindconnectgetLastSocketErrorgetLastSocketErrorAsStringlistenreceivesendsetSocketOptionshutdown函数调用的基本流程服务器端的基本流程客户端的基本流程Class: TcpSocket学习笔记。来自CANoe帮助文档。 Class: TcpSocket accept /…...

数据分析 —— 数据预处理

一、什么是数据预处理 数据预处理&#xff08;Data Preprocessing&#xff09;是数据分析和机器学习中至关重要的步骤&#xff0c;旨在将原始数据转换为更高质量、更适合分析或建模的形式。由于真实世界的数据通常存在不完整、不一致、噪声或冗余等问题&#xff0c;预处理可以…...

软件架构风格系列(4):事件驱动架构

文章目录 前言一、从“用户下单”场景看懂事件驱动核心概念&#xff08;一&#xff09;什么是事件驱动架构&#xff1f;&#xff08;二&#xff09;核心优势&#xff1a;解耦与异步的双重魔法 二、架构设计图&#xff1a;三要素构建事件流转闭环三、Java实战&#xff1a;从简单…...

windows系统各版本下载

以下各版本Windows系统链接来自网友整理&#xff0c;请通过迅雷或者其他支持ED2K或BT的下载工具进行下载。 注&#xff1a;以下为原版系统&#xff0c;未激活、非破解版&#xff0c;仅供下载体验学习&#xff0c;请勿从事商业活动。 Windows 11 Windows 11 (consumer editions…...

arduino平台读取鼠标光电传感器

鼠标坏掉了&#xff0c;大抵是修不好了。&#xff08;全剧终—&#xff09; 但是爱动手的小明不会浪费这个鼠标&#xff0c;确认外观没有明显烧毁痕迹后&#xff0c;尝试从电路板上利用光电传感器进行位移的测量&#xff0c;光电传感器&#xff08;型号&#xff1a;FCT3065&am…...

【Linux网络】网络层

网络层 在复杂的网络环境中确定一个合适的路径 IP 协议 IPV4 点分十进制[0,255].[0,255].[0,255].[0,255]IPV6 IP地址目标网格目标主机 基本概念 主机:配有IP地址,但是不进行路由控制的设备;路由器:即配有IP地址,又能进行路由控制;节点:主机和路由器的统称。 两个问题 路…...

力扣-98.验证二叉搜索树

题目描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 class Solutio…...

5.17本日总结

一、英语 复习list2list29 二、数学 学习14讲部分内容 三、408 学习计组1.2内容 四、总结 高数和计网明天结束当前章节&#xff0c;计网内容学完之后主要学习计组和操作系统 五、明日计划 英语&#xff1a;复习lsit3list28&#xff0c;完成07年第二篇阅读 数学&#…...

大模型学习:Deepseek+dify零成本部署本地运行实用教程(超级详细!建议收藏)

文章目录 大模型学习&#xff1a;Deepseekdify零成本部署本地运行实用教程&#xff08;超级详细&#xff01;建议收藏&#xff09;一、Dify是什么二、Dify的安装部署1. 官网体验2. 本地部署2.1 linux环境下的Docker安装2.2 Windows环境下安装部署DockerDeskTop2.3启用虚拟机平台…...