本文的编译环境为Linux RedHat 9.0 + gcc,在编译以下窗口程序之前,必须确定你的系统已安装了以下三大组件:
1:开发工具
2:X软件开发
3:GNOME软件开发
如果在安装Linux RedHat 9.0的时候未选择这三个软件包进行安装,则可以单击红帽图标-系统设置-添加/删除应用程序,打开软件包管理窗口,点选开发工具,X软件开发,GNOME软件开发这三项前的复选框进行安装。
1: 将以下代码保存为gtkwin.c文件,放在root管理员目录下。
#include
<
gtk
/
gtk.h
>
/*
按钮单击回调函数
*/
void
Button_Click(GtkWidget
*
widget,gpointer
*
data)
{
/*
在命令行上打印一行消息
*/
g_print(
"
button clicked and data = %s\n
"
,(
char
*
)data);
}
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);
/*
设置窗口关闭销毁时的回调函数
*/
g_signal_connect(GTK_OBJECT(window),
"
destroy
"
,GTK_SIGNAL_FUNC(Destroy),NULL);
/*
设置窗口标题
*/
gtk_window_set_title(GTK_WINDOW(window),
"
My First GTK+ Window
"
);
/*
设置窗口边框宽度
*/
gtk_container_border_width(GTK_CONTAINER(window),
20
);
/*
创建按钮
*/
button
=
gtk_button_new_with_label(
"
Hello World
"
);
/*
设置按钮单击时的回调函数
*/
g_signal_connect(GTK_OBJECT(button),
"
clicked
"
,GTK_SIGNAL_FUNC(Button_Click),
"
Hello World!
"
);
/*
将按钮添加到窗口中
*/
gtk_container_add(GTK_CONTAINER(window),button);
/*
显示按钮和窗口
*/
gtk_widget_show(button);
gtk_widget_show(window);
/*
进入消息循环
*/
gtk_main();
return
0
;
}
2:单击红帽图标-系统工具-终端,打开命令行窗口。输入以下命令。其中[root@localhost root]#为命令行提示符,不需要手工输入。该提示符表示的是[当前用户名@当前机器名 当前所在目录]。注意,如果源文件不在root目录,则应先进入到该目录下。
[root@localhost root]# gcc -o gtkwin gtkwin.c `pkg-config --libs --cflags gtk+-2.0`
[root@localhost root]# ./gtkwin
-o gtkwin选项表示编译生成的程序文件名为gtkwin,如果不指定该选项,则gcc编译器默认为a.out。gtkwin.c指定要编译的源文件名,`pkg-config --libs --cflags gtk+-2.0`要注意的是前后的两个"`"字符为键盘上数字键1旁边的那个键的输入,而不是";"键旁边的那个单引号键的输入。
./gtkwin运行编译生成后的当前目录下的gtkwin程序。
OK,到这里一个Gtk+窗口程序就可以编译成功了。
另一种编译方法可以使用Makefile,输入以下代码保存为Makefile文件,同样放到root管理员目录下。
CC
=
gcc
program
=
gtkwin
#PATH
+=
/
usr
/
include
/
gtk2.
0
LDLIBS
=
`pkg
-
config
--
libs gtk
+-
2.0
`
CFLAGS
=
-
Wall
-
g `pkg
-
config
--
cflags gtk
+-
2.0
`
$(program):$(program).o
$(CC) $(LDLIBS) $(program).o
-
o $(program)
$(program).o:$(program).c
$(CC) $(CFLAGS)
-
c $(program).c
clran:
-
rm
-
f $(program)
-
rm
-
f
*
.o
再在终端里输入:
[root@localhost root]# make
[root@localhost root]# ./gtkwin
同样可以成功编译,并且方便得多。