ACTom 发表于 2012-1-28 12:51:27

GTK 2.24.9 Windows 静态库

本帖最后由 ACTom 于 2013-1-12 17:40 编辑

花了将近一个星期时间的研究,终于把GTK 2.24.9静态版本编译完了,基本都是用的最新的稳定版本。

各库版本:

库版本
下载地址

libiconv1.12
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
gettext0.18.1.1ftp://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.1.1.tar.gz
libtiff3.9.5
http://download.osgeo.org/libtiff/tiff-3.9.5.tar.gz
libpng1.5.7
http://downloads.sourceforge.net/libpng/libpng-1.5.7.tar.bz2
jpegsrcv8b
http://www.ijg.org/files/jpegsrc.v8b.tar.gz
jasper1.900.1
http://www.ece.uvic.ca/~frodo/jasper/software/jasper-1.900.1.zip
libffi3.0.10
ftp://sourceware.org/pub/libffi/libffi-3.0.10.tar.gz
glib2.30.2
http://mirrors.ustc.edu.cn/gnome/sources/glib/2.30/glib-2.30.2.tar.xz
atk2.0.1
http://ftp.gnome.org/pub/gnome/sources/atk/2.0/atk-2.0.1.tar.xz
cairo1.10.2
http://cairographics.org/releases/cairo-1.10.2.tar.gz
pixman0.24.2
http://cairographics.org/releases/pixman-0.24.2.tar.gz
pango1.28.4
http://ftp.gnome.org/pub/gnome/sources/pango/1.28/pango-1.28.4.tar.bz2
fontconfig2.8.0
http://www.fontconfig.org/release/fontconfig-2.8.0.tar.gz
freetype2.4.8
http://download.savannah.gnu.org/releases/freetype/freetype-2.4.8.tar.gz
expat2.0.1
http://sourceforge.net/projects/expat/files/expat/2.0.1/expat-2.0.1.tar.gz/download
gdk-pixbuf2.24.1
http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.24/gdk-pixbuf-2.24.1.tar.xz
gtk+
2.24.9
http://ftp.acc.umu.se/pub/gnome/sources/gtk+/2.24/gtk+-2.24.9.tar.xz

下载地址:
完整版:http://gtk.awaysoft.com/download/gtk-2.24.9-static.7z (包含bin,include,lib,etc,share目录)
简单版:http://gtk.awaysoft.com/download/gtk-2.24.9-static-libonly.7z (仅包含include,lib目录以及pkg-config)

使用这个静态库编译的gtk-demo:http://gtk.awaysoft.com/download/gtk-demo.7z
使用这个静态库编译的测试程序:http://gtk.awaysoft.com/download/gtktest.7z (包含源文件和可执行文件,可执行文件经过strip和upx压缩)

编译所用的MingW环境:http://gtk.awaysoft.com/download/MinGW.7z (gcc 4.6.2)

对源码的修改:
1、部分tests目录下程序(有几个测试程序少定义了几个全局变量,还有几个是引用头文件有问题,测试程序对最后库生成没有影响)
2、注释了atk、cairo、pango、gtk源码中的DllMain函数,这是为动态库准备的,但是不知道为什么,这4个库的源码中,没有为静态库取消掉这些函数,如果不注释掉这个函数,编译时会提示函数重复定义。
3、修改了部分Makefile文件,为LIBS添加-luuid -lgdiplus。

ACTom 发表于 2012-1-28 13:00:47

本帖最后由 ACTom 于 2013-6-6 10:41 编辑

编译时留下的记录,仅供参考:

编译顺序:
zlib->libiconv->gettext(编译时间较长,同时编译jpeg-8b、libffi、libpng、tiff、expat、pixman、jasper)->glib->atk->freetype->fontconfig->cairo->pango->gdk-pixbuf->gtk

编译前执行:export PKG_CONFIG_PATH=/gtk/lib/pkgconfig
export LIBS=-L/gtk/lib
export CFLAGS="-I/gtk/include -march=i686"
export PATH=/gtk/bin:$PATH
export PKG_CONFIG=/gtksources/pkg-config.sh由于glib需要python2.5的支持,安装python2.5到C:\\Python25目录,然后复制目录中的python.exe为python2.5.exe
编译基本指令:(编译时后面要加后面的附加指令)./configure --prefix=/gtk --bindir=/gtk/bin --sbindir=/gtk/sbin --libexecdir=/gtk/libexec --sysconfdir=/gtk/etc --libdir=/gtk/lib --includedir=/gtk/include --datarootdir=/gtk/share --mandir=/gtk/share/man --datadir=/gtk/share --infodir=/gtk/share/info --localedir=/gtk/share/locale --enable-explicit-deps=no --enable-debug=no --enable-static=yes --enable-shared=no --disable-docs当上面的编译指令提示,没有--datarootdir这个选项时,用下面这个。./configure --prefix=/gtk --bindir=/gtk/bin --sbindir=/gtk/sbin --libexecdir=/gtk/libexec --sysconfdir=/gtk/etc --libdir=/gtk/lib --includedir=/gtk/include --mandir=/gtk/share/man --infodir=/gtk/share/info --enable-explicit-deps=no --enable-debug=no --enable-static --disable-shared --disable-docsatk,cairo,gtk,gdk_pixbuf,pango都有文件包含了DllMain函数,请注释掉

Makefile中可能添加的LIBS内容-mms-bitfields -lintl -liconv -lole32 -luuid -lgdiplus

附加指令及说明
libiconv: --enable-relocatable

gettext: --without-emacs --without-cvs --disable-curses --disable-java --disable-native-java --enable-relocatable --enable-threads=win32
{
运行mingw32-configure前,修改Makefile.in的214行gnulib-local gettext-runtime gettext-tools为gnulib-local gettext-runtime
}

zlib:./configure --prefix=/gtk/ --shared

jasper:
{
编译会提示sleep函数没找到,打开 src/appl/tmrdemo.c
在第二行添加:
#include <stdlib.h>
#define sleep(n) _sleep(n * 1000)
}

glib: --cache-file=win32.cache --disable-gtk-doc --enable-threads --with-threads=win32 --with-libiconv=native
{
win32.cache内容:
glib_cv_long_long_format=I64
glib_cv_stack_grows=no

遇到如下错误:
gcancellable.c: In function 'g_cancellable_reset':
gcancellable.c:273:7: error: 'g__cancellable_lock' undeclared (first use in this function)

在gio/gcancellable.c的60行左右添加
static GStaticMutex g__cancellable_lock = G_STATIC_MUTEX_INIT;

}

atk: --disable-gtk-doc --disable-glibtest --disable-scrollkeeper
{

}

freetype: --with-arch=i686 --disable-gtk-doc --disable-docs
{

}

fontconfig: --with-arch=i686

cairo: --with-x=no --enable-xlibs=no --enable-xlib-xrender=no --enable-xlib=no --enable-win32-font=yes
{
这个错误
cairo.c:248:2: error: implicit declaration of function 'ffs' [-Werror=implicit-function-declaration]
在src/cairo-compiler-private.h第214行左右添加,注意,请添加在#ifdef _MSC_VER之前
#ifdef __MINGW32__
#define ffs __builtin_ffs
#endif
}

pango: --with-x=no --disable-gtk-doc --with-included-modules --with-dynamic-modules=no
{
遇到这种错误*** Warning: This system can not link to static lib archive /gtk/lib/libiconv.la.
修改libtool文件,找到如下选项,并修改为如下:
build_old_libs=yes
build_libtool_libs=no
}

gdk-pixbuf: --disable-modules --with-included-loaders=yes --with-libjasper --with-libpng --with-libjpeg --with-libtiff --disable-gtk-doc --disable-glibtest --with-gdiplus
{
修改libtool文件,找到如下选项,并修改为如下:
build_old_libs=yes
build_libtool_libs=no

编译的时候,提示链接错误,修改gdk-pixbuf/Makefile和tests/Makefile,找到LIBS =这项,后面添加 -L/mingw/lib -lgdiplus

找到 io-gdip-animation.c 这个文件,添加下面一个函数:
static void
gdk_pixbuf_gdip_anim_iter_init(GdkPixbufGdipAnimIter * iter)
{

}
}

gtk: --disable-cups --disable-glibtest --disable-scrollkeeper --disable-gtk-doc --with-included-modules --disable-modules
{
pango如果测试不过,修改/gtk/lib/pkgconfig/glib-2.0.pc,在Libs:最后添加-lffi -lole32
编译的时候,提示链接错误,修改gtk及其子目录的Makefile文件,找到LIBS =这项,后面添加 -L/mingw/lib -lgdiplus -luuid

编译过程会提示编译gtk/tests/textbuffer.exe出错,修改gtk/tests/textbuffer.c
删除#include "gtk/gtktex....h",大概是26行
添加extern const gchar gtk_text_unknown_char_utf8[];
extern guint gtk_debug_flags;
这两行。
一般的编译错误都是.c文件中没有声明全局变量,变量类型具体可以查devhelp
}

ynhhjpljx 发表于 2012-2-20 12:24:04

非常好的学习资源,谢谢版主!

冰叶 发表于 2012-3-16 21:46:28

好东西,顶一下

yurec 发表于 2016-3-7 10:11:28

RE: GTK 2.24.9 Windows 静态库

ACTom 发表于 2012-1-28 13:00
编译时留下的记录,仅供参考:

编译顺序:


搜查!!!

留住我i 发表于 2018-4-21 09:49:10

RE: GTK 2.24.9 Windows 静态库

lz现在还在这个社区吗?   我想编译gtk3的静态版本,想跟lz学习学习。
页: [1]
查看完整版本: GTK 2.24.9 Windows 静态库