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

来源:互联网 发布:协同过滤推荐算法java 编辑:程序博客网 时间:2024/04/30 01:28

      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工程GTK2项目,一路设置到选择GTK's Location的路径,

出现找不到gtk.h的错误时,(如图找不到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>//主窗口中按钮的回调函数voidon_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);         //销毁对话框}//主函数intmain(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编译选项前的钩,即可。

  去掉-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注释问题(不能用//单行注释)





0 0