Ubuntu 11.10, 俺嘗試的第一個 GUI 程序 hello world, GTK install


Gtk與Qt編譯環境安裝與配置
http://wiki.ubuntu.org.cn/index.php?title=Gtk%E4%B8%8EQt%E7%BC%96%E8%AF%91%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE&variant=zh-hant

爲了編譯那個 BlowIT 源碼,結果是不行,心想會不會是沒有安裝 GTK 開發套件的原因
所以有參考了幾篇文章,目的是安裝 GTK,測試一下LINUX底下開發 GUI 的程序

GOOGLE 搜尋 UBUNTU 11.10 GTK install, 終於搞定了,總結一下俺的經歷,

搜尋到幾個網頁和資料後,總結,需要安裝的套件6個如下:
sudo apt-get install build-essential
sudo apt-get install gtk+2.0
sudo apt-get install libgtk2.0-dev
pkg-config –cflags –libs gtk+-2.0
(pkg-config, 這個命令是安裝後,查看到底 gtk 裝在哪裏,有顯示就好,沒理會內容爲何)
sudo apt-get install gnome-core-devel
sudo apt-get install libglib2.0-doc libgtk2.0-doc
sudo apt-get install devhelp
sudo apt-get install glade-gnome glade-common glade-doc

編譯結果,綠色字的就是編譯好的可執行檔

執行結果


memo, 2012-12-04, the compliation warning,

Gtk-WARNING **: Unable to locate theme engine in module_path: "pixmap"

or

Gtk-WARNING **: 無法在 module_path 中找出佈景主題引擎:‘pixmap’

can be fixed as http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=47700

need to install a package of gtk2-engines-pixbuf

sudo aptitude install gtk2-engines-pixbuf

參考人家的資料:

ubuntu gtk 配置与hello world, 複製他的源碼,按照這位網主提供的編譯指令,無論該如何都出錯,說找不到  gtk/gtk.h
http://istrone.com/?p=627

GTK Gossip: Ubuntu 下安裝 GTK
http://caterpillar.onlyfun.net/Gossip/GTKGossip/GTKUnderUbuntu.html

編譯選項加上 -Wall -g, 讓俺編譯成功的關鍵
http://ubuntuforums.org/showthread.php?t=955438

好了,提供俺改好的源碼如下, 連接或轉載,請註明出處。

—————————


 // author said the rule of compile below, it did not works for me, compile error, gtk/gtk.h is not found
 //     gcc gtkhello.c -o gtktest `pkg-config –cflags –libs gtk+-2.0`</div>
// Ubuntu 11.10
 // gcc version : gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
 // how to compile, it is works for me :
 //     gcc -Wall -g hello_xiaolaba_gtk.c -o hello_xiaolaba_gtk `pkg-config --cflags --libs gtk+-2.0`
 // how to run in command line:
 //     run ./hello_xiaolaba_gtk
 // how to run in window:
 //     just double the icon of hello_xiaolaba_gtk
 // how to close this hello_world window:
 //    double the window, it will close

#define my_hello_msg "Hello Ubuntu & GTK! by xiaolaba 2012-02-29\n"

#include
 void hello(GtkWidget *widget,gpointer data)
 {
 //g_print("Hello Ubuntu! by xiaolaba 2012-02-29\n");
 g_print(my_hello_msg);
 }
 gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
 {
 g_print ("delete event occurred\n");
 return(TRUE);
 }
 void destroy(GtkWidget *widget,gpointer data)
 {
 gtk_main_quit();
 }
 int main( int argc, char *argv[] )
 {
 GtkWidget *window;
 GtkWidget *button;
 gtk_init (&argc, &argv);
 window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
 gtk_signal_connect (GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete_event),NULL);
 gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (destroy), NULL);
 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
 button = gtk_button_new_with_label (my_hello_msg);
 gtk_signal_connect (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (hello), NULL);
 gtk_signal_connect_object (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (window));
 gtk_container_add (GTK_CONTAINER (window), button);
 gtk_widget_show (button);
 gtk_widget_show (window);   /*显示一个窗口*/
 gtk_main();   /*进入主循环*/
 return(0);
 }

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s