GTK+ 是強大的跨平台 GUI 庫,採用 C 語言實現面向對象設計(GObject 系統)。學習 GTK+ 的第一步是正確搭建開發環境。本文詳細記錄 Windows (Visual Studio / MSVC) 與 Linux (Ubuntu + GCC) 兩大主流平台的配置流程,包含庫獲取、IDE 配置、編譯驗證全過程。
解壓後(假設路徑 D:\GTK),需將 D:\GTK\bin 加入系統 PATH:
.exe 運行時能找到 .dllC:\Windows\System32(不推薦,污染系統目錄)屬性頁 → VC++ 目錄:
D:\GTK\include 及其所有一級子目錄(gtk-3.0、glib-2.0、cairo、pango-1.0、gdk-pixbuf-2.0、atk-1.0 等,約 10 個)D:\GTK\lib屬性頁 → 鏈接器 → 輸入 → 附加依賴項:
gtk-3.lib;gdk-3.lib;gobject-2.0.lib;glib-2.0.lib;gmodule-2.0.lib;
gthread-2.0.lib;pango-1.0.lib;pangocairo-1.0.lib;atk-1.0.lib;
cairo.lib;gdk_pixbuf-2.0.lib;intl.lib
子系統:Windows (/SUBSYSTEM:WINDOWS) —— 隱藏控制台窗口(Release 模式下)。
#include
int main(int argc, char** argv) {
gtk_init(&argc, &argv);
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show(window);
gtk_main();
return 0;
}
編譯運行,彈出空窗口即配置成功。
sudo apt update
sudo apt install build-essential // GCC、make 等基礎工具鏈
sudo apt install libgtk-3-dev // GTK+ 3 開發包(含頭文件、庫、pkg-config 元數據)
libgtk-3-dev 會自動拉取 glib、cairo、pango、gdk-pixbuf、atk 等依賴的開發包。
gcc main.c -o main `pkg-config --cflags --libs gtk+-3.0`
`...` 為反引號(鍵盤 1 左側鍵),非單引號--cflags:輸出編譯標誌(-I 路徑、-D 宏等)--libs:輸出鏈接標誌(-L 路徑、-l 庫名)現代 IDE 多支持 compile_commands.json 或直接調用 pkg-config:
tasks.json 使用上述 gcc 命令find_package(PkgConfig REQUIRED); pkg_check_modules(GTK3 REQUIRED gtk+-3.0); target_link_libraries(... ${GTK3_LIBRARIES})同樣只需安裝 libgtk-3-dev,運行時需確保目標機安裝 GTK+ 運行時庫(通常桌面發行版預裝)。
cmake_minimum_required(VERSION 3.10)
project(GtkDemo LANGUAGES C)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
add_executable(gtk_demo main.c)
target_include_directories(gtk_demo PRIVATE ${GTK3_INCLUDE_DIRS})
target_link_directories(gtk_demo PRIVATE ${GTK3_LIBRARY_DIRS})
target_link_libraries(gtk_demo ${GTK3_LIBRARIES})
target_compile_options(gtk_demo PRIVATE ${GTK3_CFLAGS_OTHER})
# Windows 額外處理
if(WIN32)
target_link_libraries(gtk_demo ${GTK3_LIBRARIES} ws2_32)
# 可選:複製 DLL 到輸出目錄
add_custom_command(TARGET gtk_demo POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${GTK3_BIN_DIR}/libgtk-3-0.dll" $
# ... 其他關鍵 DLL
)
endif()
| 現象 | 原因 | 解決 |
|---|---|---|
| 編譯錯誤:找不到 gtk/gtk.h | 包含目錄未配置 | 檢查 Include 路徑是否包含 gtk-3.0 父目錄 |
| 鏈接錯誤:未解析的外部符號 | 庫目錄或依賴項缺失 | 補全 Library 目錄與附加依賴項 |
| 運行報錯:找不到 .dll / .so | 運行時路徑缺失 | Windows 加 PATH / 複製 DLL;Linux 確認 ldconfig |
| 出現黑色控制台窗口 | 子系統為 Console | VS 設置 SubSystem: Windows;或 main 入口用 WinMain |
apt install libgtk-3-dev → pkg-config --cflags --libs gtk+-3.0環境就緒後,即可開始 GTK+ 控件佈局、信號槽、GObject 繼承等核心開發之旅。