GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 6210|回复: 5

GTK 2.24.9 Windows 静态库

[复制链接]
  • TA的每日心情
    奋斗
    2016-10-11 09:20
  • 签到天数: 271 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-1-28 12:51:27 | 显示全部楼层 |阅读模式
    本帖最后由 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。
  • TA的每日心情
    奋斗
    2016-10-11 09:20
  • 签到天数: 271 天

    连续签到: 1 天

    [LV.8]以坛为家I

     楼主| 发表于 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

    编译前执行
    1. export PKG_CONFIG_PATH=/gtk/lib/pkgconfig
    2. export LIBS=-L/gtk/lib
    3. export CFLAGS="-I/gtk/include -march=i686"
    4. export PATH=/gtk/bin:$PATH
    5. export PKG_CONFIG=/gtksources/pkg-config.sh
    复制代码
    由于glib需要python2.5的支持,安装python2.5到C:\\Python25目录,然后复制目录中的python.exe为python2.5.exe
    编译基本指令:(编译时后面要加后面的附加指令)
    1. ./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这个选项时,用下面这个。
    1. ./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-docs
    复制代码
    atk,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
    }

    该用户从未签到

    发表于 2012-2-20 12:24:04 | 显示全部楼层
    非常好的学习资源,谢谢版主!

    该用户从未签到

    发表于 2012-3-16 21:46:28 | 显示全部楼层
    好东西,顶一下
  • TA的每日心情
    开心
    2016-9-14 11:09
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-3-7 10:11:28 | 显示全部楼层

    RE: GTK 2.24.9 Windows 静态库

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

    编译顺序:

    搜查!!!
  • TA的每日心情

    2016-7-20 21:06
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2018-4-21 09:49:10 | 显示全部楼层

    RE: GTK 2.24.9 Windows 静态库

    lz现在还在这个社区吗?   我想编译gtk3的静态版本,想跟lz学习学习。
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-4-19 05:23 , Processed in 0.045060 second(s), 7 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表