Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9140950
  • 博文数量: 1725
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19840
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1725)

文章存档

2024年(1)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Windows平台

2017-04-05 15:03:48

windows下glib使用
http://blog.csdn.net/owe/article/details/1603744/
glib是linux下的基础库,封装了一些C接口。当然也跨平台了。
但是在windows下搞了很久才能运行起来。
首先去官方网站下载动态库

http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.12/glib-dev-2.12.11.zip
或者你可以到GNU官方网站下载了,下载编译好的windows的dll,glib-2.12.11.zip里面只包含动态库,没有lib库,所以只能用于运行时使用。glib-dev-2.12.11.zip包含头文件,和lib库。需要把上个包中的东西合并到bin下。

使用VS(2005)建立win32console项目, 在属性,C++的附加包含目录中输入glib.h所在目录C:/OpenSource/glib/glib-dev-2.12.11/include/glib-2.0
在链接器》输入》附加依赖项中输入glib-2.0.lib
在链接器》常规》附加库目录输入glib-2.0.lib所在目录
C:/OpenSource/glib/glib-dev-2.12.11/lib
最后把bin下的libglib-2.0-0.dll拷贝到测试程序的debug目录。
此时编译提示找不到:glibconfig.h我的解决办法是拷贝C:/OpenSource/glib/glib-dev-2.12.11/lib/glib-2.0/include下面的此文件到C:/OpenSource/glib/glib-dev-2.12.11/include/glib-2.0下。
简单的测试代码:
#include <iostream>
#include 
<glib.h>
#include 
<glib/gprintf.h>

int main(int argc, char* argv[])
{
    gchar ch[
128];
    g_sprintf(ch, 
"hello world");
    std::cout
<<g_strup(ch)<<std::endl;
    
return 0;
}


===================================================================
http://blog.sina.com.cn/s/blog_4b1452dd0102w087.html

软件和包下载步骤:

  1. 首先是开发环境,选用Dev-cpp 5.11,下载地址http://sourceforge.net/projects/orwelldevcpp/
  2. 其次是GTK+3的打包文件,这里选择其的的页面,下载地址

  首先安装dev-cpp,安装过程跟以前一样。基本不需要什么繁琐的配置,第一次运行的时候会让用户选择主题。然后接着询问是否需要缓存一些头文件,一般选择是。

  1. 接下来将下载好的zip文件解压:gtk+-bundle_3.6.4-20131201_win64.zip。最好讲其解压到某个盘的根目录文件夹下面,文件夹的名字要短,不然之后链接的时候会特别蛋疼,名字老长复制都复制不过来。这里我直接解压到d:\gtkdir文件夹里面。
  2. 解压完毕后进入gtkdir文件夹,会有一个gtk+-bundle_3.6.4-20131201_win64.README.txt文件,这是教你如何使用的说明文件。由于linux系统下一般都会把头文件缓存为环境变量,这样无论何时何地编译都不用担心找不到路径的问题。可是由于windows的特性,一般每个IDE会有自己的目录、自己的路径查找方式,经过实验,设不设置环境变量无关紧要。设置的好处是:编译后的文件当需要使用dll文件的时候,不必费神把一大堆DLL文件同时考到编译好的exe目录下
  3. 这里选择不复制环境变量。打开命令提示符,进到gtk目录下的bin文件夹(作者电脑上的目录就是d:\gtkdir\bin),依照说明依次输入调试命令(pango-querymodules > d:\gtkdir\etc\pango)(gdk-pixbuf-query-loaders > d:\gtkdir\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache)(gtk-query-immodules-3.0 > d:\gtkdir\lib\gtk-3.0\3.0.0\immodules.cache)
  4. 接下来就是最关键的配置链接问题了:

  GTK+3文件夹里面的include包简直天花乱坠,人工配置费时费力,而且失败几率极高!有时候根本无法判断到底是自己程序写错了,还是编译器搞错了。这时候就得用到pkg-config包管理器。这个包管理器的作用就是根据各个包的配置文件,帮助编译器生成配置命令。同样在bin目录下,输入命令pkg-config --cflags gtk+-3.0,就会发现返回了这么多东西:

-mms-bitfields -ID:/gtkdir/include/gtk-3.0 -ID:/gtkdir/include/cairo -ID:/gtkdir
/include/pango-1.0 -ID:/gtkdir/include/atk-1.0 -ID:/gtkdir/include/cairo -ID:/gt
kdir/include/pixman-1 -ID:/gtkdir/include -ID:/gtkdir/include/freetype2 -ID:/gtk
dir/include -ID:/gtkdir/include/libpng15 -ID:/gtkdir/include/gdk-pixbuf-2.0 -ID:
/gtkdir/include/libpng15 -ID:/gtkdir/include/glib-2.0 -ID:/gtkdir/lib/glib-2.0/i
nclude

  这时候用范围选取,小心翼翼地把他们复制到记事本里,这就是dev-cpp编译gtk时候所需要的编译命令,用于包含正确目录的头文件,非常重要。而且这时候也非常容易犯个低级失误,从dos提示符复制文本到记事本的时候,傻逼dos自动帮你分行了,你还得一个一个地去合并

-mms-bitfields -ID:/gtkdir/include/gtk-3.0 -ID:/gtkdir/include/cairo -ID:/gtkdir/include/pango-1.0 -ID:/gtkdir/include/atk-1.0 -ID:/gtkdir/include/cairo -ID:/gtkdir/include/pixman-1 -ID:/gtkdir/include -ID:/gtkdir/include/freetype2 -ID:/gtkdir/include -ID:/gtkdir/include/libpng15 -ID:/gtkdir/include/gdk-pixbuf-2.0 -ID:/gtkdir/include/libpng15 -ID:/gtkdir/include/glib-2.0 -ID:/gtkdir/lib/glib-2.0/include

  而且更加悲剧的是,由于不同目录长度分行的不同,容易导致漏掉空格。之前编译就出过死活找不到glib.h这个文件的bug,折腾半天,最后原因居然是  -ID:/gtkdir/include/glib-2.0-ID:/gtkdir/lib/glib-2.0/include这条语句-ID之间的空格居然没了,一看dos提示符,输出命令的时候glib-2.0在倒数第二行末尾,-ID在行首,于是dos直接给你把空格去掉了,简直悲剧。

  这些命令复制到哪里呢?你可以在工具里面的编译器选项里面添加,也可以在project里面添加。因为每个工程不一样,用不用到gtk库不一定,所以我选择在工程里面添加。

Win64 GTK+3编程【2】GTK+3完整包下载与Dev-cpp 5.11配置完全教程 Win64 GTK+3编程【2】GTK+3完整包下载与Dev-cpp 5.11配置完全教程
  把生成的-ID一堆的命令,复制到如图所示的C compiler和C++ compiler里面。至于之后的Linker里面的命令,则是用pkg-config包这样调出来:pkg-config --libs gtk+-3.0(同样在gtk的bin文件夹里面输入)
  到此即可编译运行了。但是运行完各种提示确实DLL,怎么办?

  进到gtk\bin文件夹,将里面所有的dll文件全部复制到你生成exe的目录里面

Win64 GTK+3编程【2】GTK+3完整包下载与Dev-cpp 5.11配置完全教程  Win64 GTK+3编程【2】GTK+3完整包下载与Dev-cpp 5.11配置完全教程
如此即可大功告成,安心编译等待结果吧!!!

Win64 GTK+3编程【2】GTK+3完整包下载与Dev-cpp 5.11配置完全教程

程序源代码:

#include
//my first gtk program
static void print_hello(GtkWidget *widget, gpointer data){
    g_print ("Hello World\n");
}
static void activate (GtkApplication *app, gpointer user_data){
    GtkWidget *window;
    GtkWidget *button;
    GtkWidget *button_box;
    window = gtk_application_window_new (app);
    gtk_window_set_title (GTK_WINDOW (window), "Window");
    gtk_window_set_default_size (GTK_WINDOW (window), 200200);
    button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
    gtk_container_add (GTK_CONTAINER (window), button_box);

    button = gtk_button_new_with_label ("Hello World");
    g_signal_connect (button, "clicked" , G_CALLBACK (print_hello), NULL);
    g_signal_connect_swapped (button, "clicked" , G_CALLBACK (gtk_widget_destroy), window);
    gtk_container_add (GTK_CONTAINER (button_box), button);
    gtk_widget_show_all (window);
}
int main(int argc, char **argv){
    GtkApplication *app;
    int status;
    app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
    g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
    status = g_application_run (G_APPLICATION (app), argc, argv);
    g_object_unref (app);
    return status;

}


阅读(1521) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~