64位win7下,CodeBlock13.12配置GTK3.x環境以及第一個DEMO的執行
MAIL:crachman#qq.com
OS版本:windows 7 Ultimate 64Bit English Version
GTK版本:GTK+ 3.6.4下載32位版本(官網提示:64位版本相容性不保證)如圖2所示
一、下載安裝
圖1. CodeBlocks13.12官網下載示意圖
圖2.GTK+ 3.6.4官網下載示意圖
本文CodeBlock安裝路徑:C:\Program Files (x86)\CodeBlocks ,按提示安裝即可。
GTK的安裝參照壓縮包中gtk+-bundle_3.6.4-20130921_win32.README.txt的說明即可!
其中GTK安裝包的解壓路徑:D:\gtk3 (路徑可以任選,我一般選擇“絕對路徑”中不含中文)
二、設定環境變數
右擊“計算機(Computer)” → “屬性(Properties)” ,
在彈出視窗的側邊欄選擇“高階系統設定(Advanced system settings)”→ 在彈出的視窗選擇"高階(Advanced)"標籤頁"
→點選“環境變數(Environment Variables)”,在“使用者變數”或者“系統變數”(任一均可,我選使用者變數),
將 C:\Program Files (x86)\CodeBlocks\MinGW\bin 和 D:\gtk3\bin 新增到PATH中,注意路徑間要英文輸入法
路徑新增後,在重新開啟的命令列中敲入:gcc -v會看到編譯器的版本情況,說明MinGW的bin路徑新增成功。
然後按照gtk+-bundle_3.6.4-20130921_win32.README.txt中提示,在命令列下敲入以下命令
pkg-config --cflags gtk+-3.0
pango-querymodules > c:\gtk\etc\pango\pango.modules
gdk-pixbuf-query-loaders > c:\gtk\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache
gtk-query-immodules-3.0 > c:\gtk\lib\gtk-3.0\3.0.0\immodules.cache
最後敲入 gtk3-demo 會看到會執行在D:\gtk3\bin\目錄下自帶的gtk3-demo.exe程式。
該程式提供了gtk幾乎所有構件的使用樣例程式和原始碼。
如果成功地配置到目前,說明CodeBlocks和GTK+ 3.x已經正確安裝。
三、在CodeBlocks中建立一個GTK3的工程(這裡就不介紹如何建立GTK2的工程)
如果直接建立一個GTK工程,一路設定到選擇GTK's Location的路徑,
出現找不到gtk.h的錯誤時,(如圖)說明你安裝的GTK+
3.x的,不能建立GTK2的專案。
由於CodeBlocks目前只支援GTK2,所以要建立GTK3的程式,只能通過建立“空專案”後,手動設定。
以下是GTK3工程手動配置的內容:
點選"Project"→"build options"
1:選擇“Compiler settings”標籤中的Other options子標籤
加入編譯選項
-mms-bitfields 選項解釋:編譯GTK程式必須的選項
2:選擇“Linker settings”標籤在"Link libraries"中點選"Add"按鈕,在彈出的檔案選擇對話方塊中找到d:\gtk3\lib\目錄下的檔案全選,一次性加入所有的lib檔案,無需一個一個的加入。
在Other Linker options
加入連結選項
-mwindows 選項解釋:告訴編譯器去編譯一個視窗程式,生成的程式可以去掉控制檯。
3:選擇“Search directories”標籤
在"Compiler"子標籤中點Add,新增gtk+3.x中所有的標頭檔案,一般在名為include的資料夾下
即,要加入所有包含include資料夾和子資料夾路徑,而且只能一條一條加。
D:\gtk3\include
D:\gtk3\include\atk-1.0
D:\gtk3\include\atk-1.0\atk
D:\gtk3\include\cairo
D:\gtk3\include\fontconfig
D:\gtk3\include\freetype2
D:\gtk3\include\freetype2\freetype
D:\gtk3\include\freetype2\freetype\config
D:\gtk3\include\gail-3.0
D:\gtk3\include\gail-3.0\libgail-util
D:\gtk3\include\gdk-pixbuf-2.0
D:\gtk3\include\gdk-pixbuf-2.0\gdk-pixbuf
D:\gtk3\include\gio-win32-2.0
D:\gtk3\include\gio-win32-2.0\gio
D:\gtk3\include\glib-2.0
D:\gtk3\include\glib-2.0\gio
D:\gtk3\include\glib-2.0\glib
D:\gtk3\include\glib-2.0\gobject
D:\gtk3\include\gtk-3.0
D:\gtk3\include\gtk-3.0\gdk
D:\gtk3\include\gtk-3.0\gtk
D:\gtk3\include\jasper
D:\gtk3\include\libcroco-0.6
D:\gtk3\include\libcroco-0.6\libcroco
D:\gtk3\include\libpng15
D:\gtk3\include\librsvg-2.0
D:\gtk3\include\librsvg-2.0\librsvg
D:\gtk3\include\libxml2
D:\gtk3\include\libxml2\libxml
D:\gtk3\include\lzma
D:\gtk3\include\pango-1.0
D:\gtk3\include\pango-1.0\pango
D:\gtk3\include\pixman-1
D:\gtk3\lib\glib-2.0\include
請注意這裡還有兩條不要忘記加,
D:\gtk3\lib\libffi-3.0.12\include 否則在編譯時,會出現在 gtypes.h錯誤提示找不到glibconfig.h標頭檔案。
四、一個HelloWorld測試程式
以下是一段網上查詢的HelloWorld程式,本人初學者還不會寫呢...
#include <gtk/gtk.h>
//主視窗中按鈕的回撥函式
void on_button_clicked(GtkWidget* button, gpointer userdata)
{
GtkWidget *dialog;
//建立帶確認按鈕的對話方塊,父控制元件為空
dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_MODAL |GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
(gchar*)userdata);
gtk_dialog_run(GTK_DIALOG(dialog)); //顯示並執行對話方塊
gtk_widget_destroy(dialog); //銷燬對話方塊
}
//主函式
int main(int argc, char* argv[])
{
GtkWidget *window, *button;
//初始化GTK+程式
gtk_init(&argc, &argv);
//建立視窗,併為視窗的關閉訊號加回調函式以便退出
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window),"delete_event",
G_CALLBACK(gtk_main_quit),NULL);
gtk_window_set_title(GTK_WINDOW(window),"Hello World!");
gtk_container_set_border_width(GTK_CONTAINER(window),10);
//建立按鈕控制元件,為單擊訊號加回調函式,將其放入視窗中
button=gtk_button_new_with_label("Hello World!");
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)"你好!\n自由的世界。");
gtk_container_add(GTK_CONTAINER(window),button);
//下面函式顯示視窗控制元件同時顯示其中的所有其它控制元件
gtk_widget_show_all(window);
gtk_main();
return FALSE;
}
正確的Build之後Run效果如圖:
如果你也看到這個畫面,恭喜你!
你真的很幸運,一方面說明我的記錄給別人帶來了幫助,另一方面說明我自己的經歷沒有這麼幸運咯~
下面是我在這個過程中遇到的幾個問題和查到的解決方案:
1. 在gtypes.h中,錯誤指向#include<glibconfig.h>,提示error: glibconfig.h No such file or directory。
錯誤方案:絕對不是去網上隨便下載一個glibconfig.h然後新增到include目錄下,這樣會引來更多錯誤。
該標頭檔案是由編譯glib函式庫自動產生的,在D:\gtk3\lib\glib-2.0\include目錄下
正確方案:"Project"→"build options" 選“Search directories”標籤 在"Compiler"子標籤中加一標頭檔案路徑,
繼續新增一個頭檔案路徑:D:\gtk3\lib\glib-2.0\include
2.編譯時發現,單行註釋符號//會出錯,改成多行註釋符號/**/後編譯正確。
正確方案:預設用ANSI C規範的編譯器選項,不識別C++中的單行註釋,去掉含-ansi編譯選項前的鉤,即可。
3.GTK3的程式中的中文“你好,自由的世界”無法正常顯示!如下圖
正確方案:“Settings”→“Editor” 選擇“Other settings”標籤,將Encoding改成UTF-8,並選中Use this encoding的As default encoding選項,如下圖所示
以上,是我目前所遇到的所有問題。如文中有文筆描述上的問題,歡迎提出~ 同時若該過程有遇到其他的問題,也歡迎提出一起解決~
本文參考連結有如下:
以及作者He YiJun對問題1慷慨解答,半夜2點回復的郵件,我剛好看到便起床,成功的測試了第一個demo,並記錄下此過程。