Windows 7/Visual Studio2012下使用GTK

Glib是一个多种用途的工具库,它提供许多有用的数据类型,宏定义,类型变换,字符串工具,文件工具,主循环的抽象等等。它可以用于许多类-UNIX平台、Windows,OS/2和BeOS中。GLib在GNU库通用公共许可(GNU LGPL)下发布。
GLib的主要策略是除了数据结构管理功能以外所有的功能都是线程安全的。如果你有两个线程关联系统的数据结构,他们必须使用锁来同步他们的操作。

其实并没有去刻意的要使用这个库,并且所谓的跨平台的东西配置起来都不是那么的容易的。之所以要用这个东西是因为要编译libgpod的代码,网上的说明文件不少,但是代码迁移到windows还是不少的问题的。

官方网站上提供了不少的文件和资源包,为了方便建议直接下载all-in-one bundle,猛击此处下载,猛击此处访问官方下载页面。

下载后解压到某个目录下,我这里是解压到了D:\glib2.28.8,下面的配置以这个路径为例,如果你的不是,那么请自行修改相关路径。打开项目的属性,切换到VC++ Directory标签页,修改如下两项配置:

include

在包含目录中加入如下内容:

D:\glib2.28.8\include\atk-1.0;D:\glib2.28.8\lib\gtk-2.0\include;D:\glib2.28.8\include\pango-1.0;D:\glib2.28.8\include\cairo;D:\glib2.28.8\lib\glib-2.0\include;D:\glib2.28.8\include\glib-2.0;D:\glib2.28.8\include\gtk-2.0;D:\glib2.28.8\include;

在包含库目录中加入如下内容:

D:\glib2.28.8\lib;

切换到Linker页面,在修改附加依赖项:

input

在附加依赖项中加入如下内容:

glib-2.0.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;gobject-2.0.lib;gdk_pixbuf-2.0.lib;gthread-2.0.lib;gmodule-2.0.lib;pango-1.0.lib;atk-1.0.lib;zdll.lib;intl.lib;

一定要注意最后的intl.lib,如果是命令行程序用到printf的话会导致找不到符号。

修改subsystem为windows。

完成这些设置之后就可以编写测试代码了,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <regex>
#include <windows .h>
#include <gtk /gtk.h>
 
 
using namespace std;
int main( int argc, char **argv );
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow){
return main (__argc, __argv);
}
 
 
int main( int argc, char **argv ) {
GtkWidget *window;
gtk_init( &argc, &argv );
window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
g_signal_connect( G_OBJECT( window ), "destroy",
G_CALLBACK( gtk_main_quit ), NULL );
gtk_widget_show( window );
gtk_main ();
return 0;
}
</gtk></windows></regex></iostream>

如果可以无错编译,那么基本就成功了,运行效果如下:

app1

PS:
关于gcc下的__attribute__ ((__packed__)),许多代码都会有这个宏,但是vs中并没有这个宏的定义,那么可以根据这个宏的原定义自己定义一个vs下的等效代码如下:

#define PACK( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop) )

gcc中可以使用如下定义:

#define PACK( __Declaration__ ) __Declaration__ __attribute__((__packed__))

对应的在gcc中使用方法如下:

struct myStruct
{
    int a;
    int b;
}__attribute__ ((__packed__));

在vs中则要用下面的代码来实现:

PACK(
struct myStruct
{
    int a;
    int b;
});

参考链接:http://www.etechplanet.com/blog/visual-studio-2008-configuration-for-gtk2b-gui-development.aspx

You may also like

发表评论

电子邮件地址不会被公开。 必填项已用*标注