栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Windows系统搭建gtk+-2.0开发环境教程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Windows系统搭建gtk+-2.0开发环境教程


GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。
GTK+ 是一种图形用户界面(GUI)工具包。也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于 GUI 的应用程序。可以把 GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建 GUI 的许多已经准备好的构造块。


安装gtk库
gtk+ -bundle_2.24.8-20111122_win32.zip:下载地址
下载完成后解压
将其中bin目录增加到环境变量path里面,以便系统在运行gtk程序时会找到运行时依赖的动态库


使用mingw编译gtk
MinGW32:下载地址
下载完成后解压,将其中的bin目录添加到系统环境变量path中

使用记事本编辑gtk测试程序
gtktest.c

#include
int main(int argc,char* argv[]){
	GtkWidget* window;
	GtkWidget* label;
	gtk_init(&argc,&argv);
 
	window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),"hello world");
	gtk_window_set_default_size(GTK_WINDOW(window),300,200);
	label=gtk_label_new("hello world!!");
	gtk_container_add(GTK_CONTAINER(window),label);
	g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
	gtk_widget_show_all(window);
 
	gtk_main();
 
return 0;
}

使用pkg-config命令(gtk库bin目录下自带的)确定gtk+ -2.0的编译参数

pkg-config --cflags --libs gtk+-2.0

得到以下输出,它们指定了gtk程序在编译时附加的头文件目录,库文件目录以及链接到哪些库文件

-mms-bitfields -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/gtk-2.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/lib/gtk-2.0/include -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/atk-1.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/cairo -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/gdk-pixbuf-2.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/pango-1.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/glib-2.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/lib/glib-2.0/include -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/freetype2 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/libpng14  -LC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl

将这些输出拷贝下来。
使用以下命令编译gtk程序,命令最后粘贴上pkg-config输出的编译链接参数

gcc gtktest.c -o a.exe -mms-bitfields -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/gtk-2.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/lib/gtk-2.0/include -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/atk-1.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/cairo -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/gdk-pixbuf-2.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/pango-1.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/glib-2.0 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/lib/glib-2.0/include -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/freetype2 -IC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/libpng14  -LC:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl

运行程序

a.exe

注意的问题:
如果出现以下问题,是mingw编译器位数与gtk不兼容导致的。链接时无法调用gtk的库

编译器要使用32位mingw,如何查看mingw位数,输入以下命令

gcc -v

如果输出信息中有Target: i686-w64-mingw32,说明是32位的,如果输出信息中有Target: x86_64-w64-mingw32,则是64位mingw。
同样gtk也要下载win32版本

在运行gtk程序时,总会伴随命令提示符窗口出现,编译时加入-mwindows参数就不会有了

对于gtk的lib文件夹,有gcc链接时用到的库libxxx.dll.a

对于gcc的静态链接库格式一般是libxxx.a。而这些库的后缀是.dll.a。我怀疑链接参数是不是-lxxx.dll。实际上,我发现使用pkg-config输出的参数-lxxx可以编译链接成功,而使用-lxxx.dll也可以链接成功。并且gtk是动态编译的,运行时还是需要dll文件的支撑。因此,这些.dll.a文件并不是真正的静态库文件。而是类似msvc进行动态编译时,dll文件对于的lib文件一样。
个人感觉一般libxxx.dll.a文件不是真正的静态库文件,在运行时需要xxx.dll文件的支撑。
对于这一点ffmpeg的库也是一样的

而libxxx.a格式的文件就是静态库了,程序在编译链接后可以独立运行


使用vs编译gtk
使用vs新建一个控制台项目

编辑GtkTest.cpp,输入以下代码

#include
int main(int argc,char* argv[]){
	GtkWidget* window;
	GtkWidget* label;
	gtk_init(&argc,&argv);

	window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),"hello world");
	gtk_window_set_default_size(GTK_WINDOW(window),300,200);
	label=gtk_label_new("hello world!!");
	gtk_container_add(GTK_CONTAINER(window),label);
	g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
	gtk_widget_show_all(window);

	gtk_main();

	return 0;
}

之后点击项目,GtkTest属性,为项目添加附加包含目录,没错就是pkg-config输出的-I开头的所有参数,都需要手动进行添加

C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/gtk-2.0
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/lib/gtk-2.0/include
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/atk-1.0
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/cairo
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/gdk-pixbuf-2.0
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/pango-1.0
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/glib-2.0
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/lib/glib-2.0/include
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/freetype2
C:/Users/m/Downloads/gtk+-bundle_2.24.10-20120208_win32/include/libpng14

之后添加附加库目录,也就是gtk的lib文件夹,里面包含了vs动态编译时所需要的lib文件。

添加附加依赖项,是gtk的lib文件夹下所有的.lib文件

gtk-win32-2.0.lib
gdk-win32-2.0.lib
atk-1.0.lib
gio-2.0.lib
pangowin32-1.0.lib
gdi32.lib
pangocairo-1.0.lib
gdk_pixbuf-2.0.lib
pango-1.0.lib
cairo.lib
gobject-2.0.lib
gmodule-2.0.lib
gthread-2.0.lib
glib-2.0.lib
intl.lib

之后确认保存,编译运行就可以了


Tips:
/share/gtk-doc/html/gtk/index.html是gtk的参考手册

/bin/gtk-demo.exe是gtk的演示程序,里面有gtk程序例子并且可以查看源代码

相关下载:
gtk±bundle_2.24.10-20120208_win32.zip
i686-4.8.4-release-win32-sjlj-rt_v3-rev0.7z

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934258.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号