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选项,如下图所示
以上,是我目前所遇到的所有问题。如文中有文笔描述上的问题,欢迎提出~ 同时若该过程有遇到其他的问题,也欢迎提出一起解决~
本文参考链接有如下:
以及作者He YiJun对问题1慷慨解答,半夜2点回复的邮件,我刚好看到便起床,成功的测试了第一个demo,并记录下此过程。
2.一个CodeBlocks注释问题(不能用//单行注释)