热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Win8.1上VS2013搭建GTK3.6.4

GTK+是一个图形工具包,在OpenSIFT主要用它来实现窗口和画一些线。在TheGTK+Project这个网站上下载GTK+,我选择Windows(64-bit)版本,当前是Versi

GTK+是一个图形工具包,在OpenSIFT主要用它来实现窗口和画一些线。在The GTK+ Project这个网站上下载GTK+,我选择Windows(64-bit)版本,当前是Version3.6.4,点all-in-one bundle.下载下来是一个zip压缩包,里面有一个txt说明。把压缩包解压到一个空目录下,比如我放在E:\GTK\ 下,然后将bin的路径添加进系统环境变量PATH中。之后按说明验证,Win+R输入cmd运行,在cmd中输入“pkg-config --cflags gtk+-2.0” ,会有一些输出,输入 “gtk3-demo” ,会出现一个示例,演示GTK+的一些功能控件。

接下来要在VS2013的项目中进行一番配置了。

(详细流程参考:http://stackoverflow.com/questions/15906580/how-to-configure-gtk-on-visual-studio-2010)


其中需改进部分:

修改包含目录:$(VC_IncludePath);$(WindowsSDK_IncludePath);E:\GTK\lib\gtk-2.0\include;E:\GTK\include;

修改库目录:E:\GTK\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);

(注意,我是64位所以是x64,如果是32位是x86)


在CMD中运行“pkg-config --cflags gtk+-3.0 > G:\gtk.txt”,打开G:\gtk.txt,内容如下:

-D_REENTRANT -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include


去掉-D_REENTRANT

把usr/全部换成绝对路径


之后如下:

-IE:/GTK/include/gtk-3.0 -IE:/GTK/include/at-spi2-atk/2.0 -IE:/GTK/include/at-spi-2.0 -IE:/GTK/include/dbus-1.0 -IE:/GTK/lib/dbus-1.0/include -IE:/GTK/include/gtk-3.0 -IE:/GTK/include/gio-unix-2.0/ -IE:/GTK/include/cairo -IE:/GTK/include/pango-1.0 -IE:/GTK/include/harfbuzz -IE:/GTK/include/pango-1.0 -IE:/GTK/include/atk-1.0 -IE:/GTK/include/cairo -IE:/GTK/include/pixman-1 -IE:/GTK/include/freetype2 -IE:/GTK/include/libpng16 -IE:/GTK/include/freetype2 -IE:/GTK/include/libpng16 -IE:/GTK/include/gdk-pixbuf-2.0 -IE:/GTK/include/libpng16 -IE:/GTK/include/glib-2.0 -IE:/GTK/lib/glib-2.0/include

添加到 右击项目-》属性-》C/C++-》命令行-》其他选项




在CMD中运行“pkg-config --libs gtk+-3.0 > G:\gtk.txt”输出的是:

-lgtk-3 -latk-bridge-2.0 -latspi -ldbus-1 -lgdk-3 -lgio-2.0 -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lpangocairo-1.0 -lpangoft2-1.0 -lharfbuzz -lpango-1.0 -lm -latk-1.0 -lcairo-gobject -lcairo -lz -lGL -lpixman-1 -lfontconfig -lexpat -lfreetype -lbz2 -lz -lpng16 -lm -lz -lexpat -lfreetype -lbz2 -lz -lEGL -lm -lpthread -lGL -lm -lpthread -lXdamage -lXfixes -lX11-xcb -lxcb-glx -lpng16 -lm -lz -lxcb-shm -lxcb-render -lXrender -lXext -lX11 -lxcb -lXau -lXdmcp -lgdk_pixbuf-2.0 -lm -lpng16 -lm -lz -lgio-2.0 -lz -lgmodule-2.0 -lgobject-2.0 -lffi -lglib-2.0 -lintl -lpcre -lintl -liconv -lpcre


以上其实很有问题,根据http://stackoverflow.com/questions/20128380/error3error-lnk1104-cannot-open-file-gtk-3-lib

直接把所有lib加进去:

cmd中进入E:\GTK\lib   

输入dir *.lib /B 得到所有lib

在最后加上/ENTRY:mainCRTStartup


内容如下:

atk-1.0.lib

cairo.lib

fontconfig.lib

gailutil.lib

gdk-win32-3.0.lib

gdk_pixbuf-2.0.lib

gio-2.0.lib

glib-2.0.lib

gmodule-2.0.lib

gobject-2.0.lib

gthread-2.0.lib

gtk-win32-3.0.lib

pango-1.0.lib

pangocairo-1.0.lib

pangoft2-1.0.lib

pangowin32-1.0.lib /ENTRY:mainCRTStartup


添加到右击项目-》属性-》链接器-》命令行-》其他选项



注意事项:保证一下配置:

子系统为windows:



若为64位的GTK:

出现错误:

1>test.obj : error LNK2019: 无法解析的外部符号 _g_type_check_instance_cast,该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 _g_signal_connect_data,该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 _gtk_widget_show,该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 _gtk_window_get_type,该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 _gtk_window_new,该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 _gtk_window_set_title,该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 _gtk_init_abi_check,该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 _gtk_main,该符号在函数 _main 中被引用

1>test.obj : error LNK2019: 无法解析的外部符号 _gtk_main_quit,该符号在函数 _main 中被引用


解决方案:

设置平台为x64,若无x64平台,则新建-》选择x64-》复制win32 成功创建:



若出现错误:

1>x64\Debug\test.obj : fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突


解决方案:(参考http://blog.csdn.net/tfy1028/article/details/8660823)

保证目标计算机是x64,修改后注意重新生成解决方案再运行:


新建源文件test.cpp

#include

int main(int argc, char* argv[])

{

gtk_init(&argc, &argv);


GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

//gtk_widget_get_preferred_size(window, 300, 200);


g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

gtk_window_set_title(GTK_WINDOW(window), "GTK+ with VS2010");


gtk_widget_show(window);


gtk_main();

return 0;

}

运行测试,成功则ok



推荐阅读
author-avatar
小贤
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有