本人作為一個老程序員(僅指年齡老)想要學習一些跨平台的開源項目,比如GTK+、GStreamer等,特寫博客方便自己加深記憶,可能很多內容是直接從一些教程中摘取,如涉及到版權問題,請聯系我:28341847@qq.com.
本系列根據《GTK+程序設計中文版》(pdf版)中內容,摘取一些個人認為比較重要的內容或代碼,並加上一些個人的注釋和心得,以達到學習的目的,其中會涉及到在linux和windows下區別,力爭做到所有代碼跨平台編譯。
示例代碼環境:
windows: win7+minGW+code::block
linux: centos6.3+code::block (VirtualBox虛擬機中)
一、什么是GTK+
GTK+ 是一種函數庫是用來幫助制作圖形交互界面的。整個函數庫都是由C 語言來編寫的。 GTK+函數庫通常也叫做 GIMP 工具包。因為,一開始GTK+是用來編寫“GIMP”–這個圖形處理軟件的。從那以后, GTK+就逐漸成為了Linux and BSDUnix 下最受歡迎的用於圖形交互界面(GUI)設計的工具包之一。時至今日,大多數的Linux 下的GUI 軟件(有圖形交互界面)都是由GTK+或者QT 來編寫的。GTK+是一種面向對象式的API(applicationprogramming interface)。Glib 是GTK+的基礎,而這種“面向對象系統”正是由“Glib”來提供的。GObject 也就是這種面向對象的機制可以為 GTK+綁定很多種開發語言。目前存在的語言有:C++, Python, Perl, Java, C#,PHP,等其他高級語言。
GTK+ 和以下“函數庫”存在着依賴關系
• Glib
• Pango
• ATK
• GDK
• GdkPixbuf
• Cairo
Glib 是一種通用的函數庫。她提供了各種各樣的語言特性,譬如說:各種數據類型,字符串函數,錯誤通知,消息隊列和線程。Pango 是一種函數庫,用來實現國際化和本地化的功能。ATK是一種平易近人的工具函數包,她提供了快捷鍵服務為肢體有缺陷的人使用電腦提供了便利。GDK 是一種函數庫,她為整個GTK+圖形庫系統提供了一些底層的“圖形實現”和“窗口實現”的方法。在Linux 中GDK 是位於X 服務器和GTK+函數庫之間的。在最近的GTK+發行版本中,越來越多的功能性函數,都交給了Cairo 函數庫來處理。GdkPixbuf 函數庫是一種函數庫工具包用於加載圖像和維護圖像“緩存”的(pixel buffer)。Cairo 是一種函數庫用於制作二維圖像。從GTK+2.8 版本以后,Cairo 就正式成為GTK+系統中的一員了。Gnome and XFce 桌面環境系統都是用GTK+來編程實現的. SWT and wxWidgets 是種很著名的編程框架,也是用GTK+來編程實現的。最傑出的GTK+軟件的代表是Firefox (火狐瀏覽器)和 Inkscape。
二、安裝GTK+開發環境
1. 安裝code::blocks
linux: http://www.codeblocks.org/downloads/26#linux64 我下載的是centos版的
windows: http://www.codeblocks.org/downloads/26#linux64 可直接選擇帶minGW的版本
2.安裝GTK+(YUM安裝)
linux:
yum install gtk2 gtk2-devel gtk2-devel-docs
windows:
http://www.gtk.org/download/win32.php 下載all-in-one bundle 安裝即可
3.配置code::blocks中的GTK+編譯器
現在安裝了gtk后,可以用pkg-config --list-all 查看,其中應該包含一個gtk+-2.0.
在code::blocks中 默認的編譯器是GNU GCC Compiler,我們為 GTK單獨設置一個編譯器:
Settings -> Compiler settings ,選擇GNU GCC Compiler 然后點擊 copy ,輸入一個gtk編譯器的名稱:GUN GCC Compiler GTK2.0,並設置為默認編譯器,點擊 set as default .然后在 Compiler settings -> Other options -> 添加`pkg-config --cflags gtk+-2.0`(目的是添加include),在linker settings -> Other linker options 中也添加 pkg-config --libs gtk+-2.0`(目的是添加lib),如果在windows下運行時候可能會報錯,如果缺少zlib1.dll ,放在 工程/bin/Debug下即可。
4.測試一下環境是否正確
在codeblocks中新建一個工程,選擇上面新添加的編譯器(GUN GCC Compiler GTK2.0),然后在main.c中添加代碼:
#include <gtk/gtk.h> int main( int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); gtk_main(); return 0; }
編譯並執行出現一個空白窗體(linux下在命令行下執行),即代表gtk+的開發環境配置成功了。順便說下可以直接用gcc命令行生成:
gcc -o hello-world main.c `pkg-config --cflags --libs gtk+-2.0`
下面是在windows 7 和 linux(centos) 下的效果