如何在配置Windows下的GTK+开发环境

作者:半瓶墨水   链接:http://www.2maomao.com/blog/how-to-gtk-dev-on-windows/

能找到这儿的,应该对GTK+有所了解,不了解的看这里

如果英文还可以的,到GTK的老巢看看说明就行了。

好,和我差不多的看官,下面开始介绍,以2.1x为例,其他的版本请自行到GTK的老巢翻找

总共需要:gtk以及其支持库,unixutils(make程序),gcc for windows(MinGW),后面两个不介绍了,自己找资料,下载后记得加入系统的PATH变量里

0. 打开gtk的下载页面:http://www.gtk.org/download/

1. hoho,有3个ftp链接,分别是:GTK+ SourceGLib SourcePango Source

2. 首先用ftp工具(没有的话下载一个filezilla看看)匿名登录GTK+ Source所在的那个ftp地址:ftp://ftp.gtk.org/pub/gtk/v2.10/ (限制连接数,请勿用ie打开)

3. 因为是windows系统,windows现在的主流还是win32,进入win32目录

4. 对,你看到了一堆的东西,包括cario / cairo-dev / gtk+ / gtk+-dev,各找个最新的下载下来

5. 然后,进入dependencies目录,霍霍,这里更多

6. 别客气,里面的atk / atk-dev / gettext / gettext-dev / libiconv / libjpeg / libpng / libtiff / libxml2 / pkg-config / zlib123-dll,捡最新的都下载下来吧

7. 好了,现在重复2-6,下载Pango和GLib所在的ftp目录下的win32及win32\depenencies目录下的东东,记住三个关键字:win32, dependencies, 还有“最新”的, “-dev” 也不放过

8. 好了好了,真的好了,把这些下载的文件全部解压到一个目录下,比如d:\system\gtkplus目录

9. 还差一点点就可以开始了,别忘了我们最终编写的程序还要有运行时支持,就像MFC也有mfcxxx.dll一样,gtk+需要GTK+运行库的支持,懒一点儿的下载这个(如果还有效的话),想稳定的到这里去找找下载吧:http://sourceforge.net/projects/gimp-win/,嫌太慢的话就搜搜google

10. 好,下载并安装完gtk+runtime(我用的是gtk+-2.10.13-setup.exe)以后,开始编写Hello world

————————编写Hello World健体强国,Oh Yeah! 分割线————————

1. 首先写个hello.c,里面的内容是

下载: hello.c
#include <gtk/gtk.h>
static gboolean delete_event( GtkWidget *widget, GdkEvent *event, gpointer data )
{
  
g_print ("delete event occurred\n");
  
return FALSE;
}
static void destroy( GtkWidget *widget, gpointer data )
{
  
gtk_main_quit ();
}
int main( int argc, char *argv[] )
{
  
GtkWidget *window;
  
GtkWidget *label;
  
gtk_init (&argc, &argv);
  
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  
g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_event), NULL);
  
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL);
  
label = gtk_label_new ("Hello GTK");
  
gtk_container_add (GTK_CONTAINER (window), label);
  
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
  
gtk_widget_show (label);
  
gtk_widget_show (window);
  
gtk_main ();
  
return 0;
}

(为了缩短篇幅删去了所有注释和空行,完整版本参见后面参考资料里面的内容)

2. 好的,为了简单起见,不依赖任何开发环境,咱来写个makefile

gtk_include=-IE:/system/gtkplus/include -IE:/system/gtkplus/lib/gtk-2.0/include -IE:/system/gtkplus/include/gtk-2.0 -IE:/system/gtkplus/include/atk-1.0 -IE:/system/gtkplus/include/pango-1.0 -IE:/system/gtkplus/include/glib-2.0 -IE:/system/gtkplus/include/cairo -IE:/system/gtkplus/lib/glib-2.0/include

gtk_lib=-LE:/system/gtkplus/lib -lcairo -lintl -lgettextpo -lglib-2.0 -lgmodule-2.0 -lgobject-2.0 -lgthread-2.0 -lgdk_pixbuf-2.0 -lgdk-win32-2.0 -lgtk-win32-2.0 -lcharset -liconv -lpango-1.0 -lpangoft2-1.0 -lpangowin32-1.0 -lpangocairo-1.0 -lzdll -latk-1.0

#target_dir=Debug

main: hello.c
gcc -mms-bitfields -Wall -g hello.c -o hello \
${gtk_include} ${gtk_lib}

all:
${MAKE} main

注意事项:
a). 这里我的目录是e:\system\gtkplus,你解压的目录可能不一样
b). “gtk_lib=” 后面的”L”后跟的是gtk lib根目录,然后后面的小写的’l’对应该根目录下面所有的.lib文件,一一排好队,中间空格隔开
c). “gtk_include=” 后面的是所有包含.h文件的文件夹,前面加个”-I”,也来排好队,中间空格隔开
d). 注意makefile要用tab不要用空格
很繁琐吧,试试这个:windows下编译gtk文件的简单方法

3. 好啦,都有了,把hello.c和makefile放在同一个目录下,打开一个命令行进入该目录,敲入”make”,回车(没有make程序?到前头翻翻是否下载了unixutils和gcc for windows)

结果出来了,运行了hello.exe会看到这个界面:
Hello GTK

恭喜,你成功了?什么?还没搞定,rp太差了吧~~~~ 😀

参考资料:
1、GTK+ 开发简介
2、在Windows 下以GTK+ 撰写视窗程式安装GTK+

10 条评论 发表在“如何在配置Windows下的GTK+开发环境”上

  1. […] 後來看到這一篇http://www.2maomao.com/blog/how-to-gtk-dev-on-windows/ 才發現是gtk_include而不是gtk include,是gtk_lib而不是gtk lib!而且編譯成功了ㄝ! […]

  2. rivershang说道:

    我的makefile如下:
    gkt_include=Files/GTK+/include/gtk-2.0 -mms-bitfields Files/GTK+/lib/gtk-2.0/include
    Files/GTK+/include/atk-1.0 Files/GTK+/include/cairo Files/GTK+/include/pango-1.0
    Files/GTK+/include/glib-2.0 Files/GTK+/lib/glib-2.0/include Files/GTK+/include/libpng12 -ID:/Program

    gkt_lib=Files/GTK+/lib -LD:/Program -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0
    -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0
    -lgmodule-2.0 -lglib-2.0 -lintl

    #target_dir=Debug

    main: example1.c
    gcc -mms-bitfields -Wall -g example1.c -o example1 \
    ${gtk_include} ${gtk_lib}

    all:
    ${MAKE} main
    make后显示如下信息:
    makefile:2:*** missing separator. Stop.
    不知是什么原因?

  3. 半瓶墨水说道:

    这种错误给出的很明显,你自己仔细检查就能发现了

  4. rivershang说道:

    是tab键吗?我都用tab键替换掉空格了,为什么还是不行呢?
    刚学gtk+及makefile,望兄台明示,谢谢!

  5. rivershang说道:

    我用MSYS的命令行环境编译能够通过,而只用MingGW时显示一下信息:
    ‘gcc’ is not recognized as an internal or external command,
    operable program or batch file.
    make: *** [all] Error 1
    不知是什么原因。
    恩~,跨平台真是有趣

  6. 半瓶墨水说道:

    @rivershang 这个错误信息说明你的MingGW里gcc路径没设置好
    或者是你的PATH环境变量里面没有包含gcc的路径

  7. 路人甲说道:

    编译通过,跳出一个对话框:
    无法定位程序输入点:g_type_register_static_simple 于动态连接库 libgobject-2.0-0.dll上

    不知什么原因??

  8. 半瓶墨水说道:

    链接库(dll)版本不匹配,运行时报错

    检查一下你的gtk运行时是不是和你下载的哪些东东版本匹配

  9. 路人甲说道:

    谢谢,下了个gtk+-2.10.13-setup.exe,问题解决

  10. […] 後來看到這一篇http://www.2maomao.com/blog/how-to-gtk-dev-on-windows/ 才發現是gtk_include而不是gtk include,是gtk_lib而不是gtk lib!而且編譯成功了ㄝ! […]

留下回复