MinGW/MSYS开发环境Part 3:建构GTK+

这一节要描述的是如何编译GTK+函式库以及需要的相关函式库。

有一些应用程式在GTK应用程式内使用gtkglext函式库来建构OpenGL内容,不幸地,在win32上,过期的gtkglext函式库似乎不能跟较新的GTK函式库一起工作,假如你对gtkglext没有兴趣,你可以使用GTK 2.22,假如你需要gtkglext的支援,你必须使用GTK 2.16,因为ㄚ琪没有兴趣使用这个函式库,所以还是跳到最新的GTK 2.22.1来玩吧。

这个会影响到pango、atk跟gtk+:照着你要的版本做适当的安装,不要同时安装两个版本。

建构libiconv

libiconv是文字编码的函式库

cd $LOCALBUILDDIR && \
wget -c http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && \
tar xzf libiconv-1.13.1.tar.gz && \
cd libiconv-1.13.1 && \
./configure --prefix=$LOCALDESTDIR --disable-shared && \
make && \
make install

之后,从静态函式库libiconv.a做iconv.dll:

 

cd /usr/local/lib && \
a2dll libiconv.a -o iconv.dll && \
mv -iv iconv.dll /usr/local/bin/

你可以用mingw-get install mingw-utils来安装,然后修改/usr/local/lib/libiconv.la的开头像下面这样:

 

# The name that we can dlopen(3).
dlname='../bin/iconv.dll'

# Names of this library.
library_names='libiconv.a'

建构gettext

gettext是一个本地化及翻译程式的工具

  • 网站:http://www.gnu.org/software/gettext
  • 下载:gettext-0.18.1.1.tar.gz
    cd $LOCALBUILDDIR && \
    wget -c http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-0.18.1.1.tar.gz && \
    tar xzf gettext-0.18.1.1.tar.gz && \
    cd gettext-0.18.1.1 && \
    ./configure --prefix=$LOCALDESTDIR --enable-threads=win32 --enable-relocatable && \
    cd gettext-runtime && \
    make && \
    make install
    然后,从静态函式库libintl.a做intl.dll像这样:

     

    cd /usr/local/lib && \
    a2dll libintl.a -o intl.dll –liconv && \
    mv -iv intl.dll /usr/local/bin/

    注:如果照原着做再回来这样做,会有一些问题,所以ㄚ琪需要观察这个问题的严重性!但是看起来编译下面的glib会有问题,所以ㄚ琪看来只好重砍MinGW来编译了!

建构glib

glib是形成GTK+基础的低阶核心函式库

建构及安装glib,可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://ftp.gnome.org/pub/gnome/sources/glib/2.26/glib-2.26.1.tar.gz && \
tar xzf glib-2.26.1.tar.gz && \
cd glib-2.26.1 && \
./configure --prefix=$LOCALDESTDIR --with-threads=win32 --with-pcre=internal && \
make && \
make install

建构pkg-config

pkg-config是一个在编译应用程式跟函式库时使用得很有帮助的工具。

这个建构会取代我们之前安装的静态执行档。

建构跟安装pkg-config可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://pkgconfig.freedesktop.org/releases/pkg-config-0.25.tar.gz && \
tar xzf pkg-config-0.25.tar.gz && \
cd pkg-config-0.25 && \
./configure --prefix=$LOCALDESTDIR --with-installed-glib && \
make && \
make install

Building freetype

Freetype是用来绘制TrueType字型的函式库。

建构及安装freetype可以执行下面的命令:

cd $LOCALBUILDDIR  && \
wget -c http://downloads.sourceforge.net/project/freetype/freetype2/2.4.3/freetype-2.4.3.tar.gz  && \
tar zxf freetype-2.4.3.tar.gz && \
cd freetype-2.4.3 && \
./configure --prefix=$LOCALDESTDIR && \
make && \
make install

预设情况,freetype停用一些有专利限制的选项,你可以在解压缩原始码后编辑档案include/freetype/config/ftoption.h 来启用它们,把#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING这一行的注解取消,在启用这个选项之前请确认读过http://www.freetype.org/patents.html

建构expat

expat是一个XML剖析函式库

建构跟安装expat可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://downloads.sourceforge.net/project/expat/expat/2.0.1/expat-2.0.1.tar.gz && \
tar zxf expat-2.0.1.tar.gz && \
cd expat-2.0.1 && \
./configure --prefix=$LOCALDESTDIR && \
make && \
make install

建构libxml2

libxml2是一个XML剖析函式库

建构跟安装libxml2可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz && \
tar zxf libxml2-2.7.8.tar.gz && \
cd libxml2-2.7.8 && \
./configure --prefix=$LOCALDESTDIR --with-threads=no && \
make && \
make install

建构fontconfig

fontconfig是一个字型的订制和配置函式库

建构跟安装fontconfig可以执行下面命令:

cd $LOCALBUILDDIR && \
wget -c http://fontconfig.org/release/fontconfig-2.8.0.tar.gz && \
tar xzf fontconfig-2.8.0.tar.gz && \
cd fontconfig-2.8.0 && \
./configure --prefix=$LOCALDESTDIR --disable-docs && \
make && \
make install

建构pixman

pixman是一个低阶的像素处理函式库

建构跟安装pixman可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://cairographics.org/releases/pixman-0.21.2.tar.gz && \
tar xzf pixman-0.21.2.tar.gz && \
cd pixman-0.21.2 && \
./configure --prefix=$LOCALDESTDIR && \
make && \
make install

建构cairo

cairo是一个2d绘图函式库

建构跟安装cairo可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://cairographics.org/releases/cairo-1.10.0.tar.gz && \
tar xzf cairo-1.10.0.tar.gz && \
cd cairo-1.10.0 && \
./configure --prefix=$LOCALDESTDIR --disable-pthread && \
make && \
make install

建构pango

pango是一个文字描绘函式库

GTK+ 2.16版本:建构跟安装pango可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://ftp.gnome.org/pub/gnome/sources/pango/1.24/pango-1.24.5.tar.bz2 && \
tar xjf pango-1.24.5.tar.bz2 && \
cd pango-1.24.5 && \
./configure --prefix=$LOCALDESTDIR --with-included-modules=yes && \
make && \
make install

 

GTK+ 2.22版本:建构跟安装pango可以执行下面的命令:

cd $LOCALBUILDDIR && \

wget -c http://ftp.gnome.org/pub/gnome/sources/pango/1.28/pango-1.28.3.tar.bz2 && \

tar xjf pango-1.28.3.tar.bz2 && \

cd pango-1.28.3 && \

./configure –prefix=$LOCALDESTDIR –with-included-modules=yes && \

make && \

make install

组态选项:

--with-included-modules=yes
这个选项可以让pango模组静态连结入主要的函式库

建构atk

atk是gnome的辅助工具

GTK+ 2.16用的版本:建构跟安装atk可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://ftp.gnome.org/pub/gnome/sources/atk/1.26/atk-1.26.0.tar.bz2 && \
tar xjf atk-1.26.0.tar.bz2 && \
cd atk-1.26.0 && \
./configure --prefix=$LOCALDESTDIR && \
make && \
make install

GTK+ 2.22用的版本:建构跟安装atk可以执行下面的命令:

 

cd $LOCALBUILDDIR && \
wget -c http://ftp.gnome.org/pub/gnome/sources/atk/1.32/atk-1.32.0.tar.bz2 && \
tar xjf atk-1.32.0.tar.bz2 && \
cd atk-1.32.0 && \
./configure --prefix=$LOCALDESTDIR && \
make && \
make install

建构Gdk-PixBuf

GdkPixBuf提供像素缓冲区跟绘制的功能

预设的建构会有奇怪的错误讯息,为了变通,我们必须使用pkg-config外覆指令码:

GTK+ 2.22用的版本:建构跟安装GdkPixBuf可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.22/gdk-pixbuf-2.22.1.tar.bz2 && \
tar xjf gdk-pixbuf-2.22.1.tar.bz2 && \
cd gdk-pixbuf-2.22.1 && \
./configure --prefix=$LOCALDESTDIR --with-included-loaders=yes --without-libjasper --disable-gdiplus && \
make && \
make install

组态选项:

--with-included-loaders=yes
这个选项让gdk影像载入器可以静态连结入gdk-pixbuf函式库
--without-libjasper
停用JPEG2000支援
--disable-gdiplus
停用win32 gdiplus支援

建构gtk+

gtk+是一个应用程式架构函式库

GTK+ 2.16用的版本:建构跟安装gtk+可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://ftp.gnome.org/pub/gnome/sources/gtk+/2.16/gtk+-2.16.6.tar.bz2 && \
tar xjf gtk+-2.16.6.tar.bz2 && \
cd gtk+-2.16.6 && \
./configure --prefix=$LOCALDESTDIR --without-libjasper --with-gdktarget=win32 --disable-gdiplus \
	--disable-modules --with-included-immodules=ime --with-included-loaders=yes  && \
make && \
make install

GTK+ 2.22用的版本:建构跟安装gtk+可以执行下面的命令:

 

cd $LOCALBUILDDIR && \
wget -c http://ftp.gnome.org/pub/gnome/sources/gtk+/2.22/gtk+-2.22.1.tar.bz2 && \
tar xjf gtk+-2.22.1.tar.bz2 && \
cd gtk+-2.22.1 && \
./configure --prefix=$LOCALDESTDIR --with-gdktarget=win32 --disable-modules --with-included-immodules=ime && \
make && \
make install

组态选项:

--disable-modules
停用动态载入模组
--with-included-immodules=ime

注意:假如make有下面的错误讯息:

./gtk-update-icon-cache: Bad file number

你必须以administrator权限执行msys shell然后重新make。

(见http://www.mail-archive.com/gtk-list@gnome.org/msg27503.html

参考:

到这里,你应该可以测试你的gtk安装:

cd demos

./pixbuf-demo

2011-01-12_090141

你应该可以看到上面有旋转按钮的视窗

cd gtk-demo

gtk-demo

2011-01-12_090852

上面的程式展示gtk元件以及范例程式码。

建构gtkglext

gtkglext是gtk+的opengl扩充函式库

在win32上,gtkglext无法跟gtk+ 2.18一起工作

建构跟安装gtkglext可以执行下面的命令:

cd $LOCALBUILDDIR && \
wget -c http://downloads.sourceforge.net/gtkglext/gtkglext-1.2.0.tar.gz && \
tar xzf gtkglext-1.2.0.tar.gz && \
cd gtkglext-1.2.0 && \
cat configure | sed 's/pangox/pangowin32/' > configure.new && \
mv configure.new configure && \
./configure --prefix=$LOCALDESTDIR --with-gdktarget=win32 --enable-debug=no && \
make && \
make install

命令解释:

cat configure | sed 's/pangox/pangowin32/' > configure.new && mv configure.new configure
这些命令更正configure指令码所以它会跟pango win32函式库连结而不会跟pango X11函式库连结。

建构范例程式:

cd examples
make wglinfo

执行下面的命令来建构跟安装gtkglext的git版本:

 

git clone git://git.gnome.org/gtkglext gtkglext-git && \
cd gtkglext-git && \
mv docs/reference/gtkglext/Makefile.am docs/reference/gtkglext/Makefile.am.org
touch docs/reference/gtkglext/Makefile.am
autoreconf -fi
./configure --prefix=$LOCALDESTDIR --with-gdktarget=win32 & \
make && \
make install

执行范例程式来测试你的建构:

 

cd examples
./wglinfo