1. 程式人生 > >64位win7下,CodeBlock13.12配置GTK3.x環境以及第一個DEMO的執行

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工程GTK2專案,一路設定到選擇GTK's Location的路徑,

出現找不到gtk.h的錯誤時,(如圖找不到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編譯選項前的鉤,即可。

  去掉-ansi該編譯選項前的鉤

    3.GTK3的程式中的中文“你好,自由的世界”無法正常顯示!如下圖

    中文無法顯示

    正確方案:“Settings”→“Editor” 選擇“Other settings”標籤,將Encoding改成UTF-8,並選中Use this encoding的As default encoding選項,如下圖所示

修改編碼設定

以上,是我目前所遇到的所有問題。如文中有文筆描述上的問題,歡迎提出~  同時若該過程有遇到其他的問題,也歡迎提出一起解決~

本文參考連結有如下:

以及作者He YiJun對問題1慷慨解答,半夜2點回復的郵件,我剛好看到便起床,成功的測試了第一個demo,並記錄下此過程。