您的位置:首页 > 其它

64位win7下,CodeBlock13.12配置GTK3.x环境以及第一个DEMO的执行

2014-02-08 05:06 471 查看
MAIL:crachman#qq.com

OS版本:windows 7 Ultimate 64Bit English Version

CB版本:CodeBlock13.12为当前最新版本自带MinGW编译器,如图1所示

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工程

,一路设置到选择GTK's
Location的路径,

出现找不到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编译选项前的钩,即可。



3.GTK3的程序中的中文“你好,自由的世界”无法正常显示!如下图



正确方案:“Settings”→“Editor” 选择“Other settings”标签,将Encoding改成UTF-8,并选中Use this encoding的As default encoding选项,如下图所示



以上,是我目前所遇到的所有问题。如文中有文笔描述上的问题,欢迎提出~ 同时若该过程有遇到其他的问题,也欢迎提出一起解决~

本文参考链接有如下:

1.CodeBlocks配置GTK+2和GTK+3

以及作者He YiJun对问题1慷慨解答,半夜2点回复的邮件,我刚好看到便起床,成功的测试了第一个demo,并记录下此过程。

2.一个CodeBlocks注释问题(不能用//单行注释)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: