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是一個文字描繪函式庫

+ 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
Print Friendly, PDF & Email

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料