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.pswp.cn/pingmian/81257.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81257.shtml
英文地址,請注明出處:http://en.pswp.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…