MinGW/MSYS開發環境Part 2:建構區域套件

這一節描述如何編譯必要的額外套件並安裝到/usr/local。

假如你不想要自己建構這些區域套件,你可以下載編譯好的套件, 壓縮檔的內容取代你的/usr/local目錄,在安裝後(你必須將local-gtk-2.16目錄名稱改為local)你可以忽略下面的指南。

  • 下載:msys-2010-11-19-local-gtk-2.16.7z

安裝就留給讀者當作習題來做。(註:這個檔無法下載,所以還是繼續看這份指南吧)

安裝靜態pkg-config執行檔

pkg-config工具是建構一些區域套件必須的工具,我已經提供了一個我們安裝在/usr/local裡的靜態連結,稍後我們會取代為我們自己建的。

解壓縮這個檔案然後安裝pkg-config到/usr/local.

wget -c http://ingar.satgnu.net/devenv/mingw32/files/msys-pkg-config-0.23-static.zip
unzip msys-pkg-config-0.23-static.zip
install pkg-config.exe /usr/local/bin
rm msys-pkg-config-0.23-static.zip pkg-config.exe

這裡有一個錯誤會影響後面的部份,我們安裝pkg-config.sh外覆指令碼作為變通的方法:

cat > /usr/local/bin/pkg-config.sh << "EOF"
#!/bin/sh
if pkg-config "$@" > /dev/null 2>&1 ; then
res=true
else
res=false
fi
pkg-config "$@" | tr -d r && $res

EOF

讓指令碼可以執行並且設定PKG_CONFIG環境變數指到這個指令碼:

chmod ugo+x /usr/local/bin/pkg-config.sh && 
cat >> /usr/local/etc/profile.local << "EOF"
PKG_CONFIG=/usr/local/bin/pkg-config.sh
export PKG_CONFIG
EOF

載入改變的profile.local:

. /usr/local/etc/profile.local

參考:

  • http://lists-archives.org/gtk/02552-make-errors.html
  • http://www.go-evolution.org/Building_Evolution_on_Windows#pkg-config
  • 註(2011/01/11):往後的GTK編譯可能會有問題,所以建議直接下載pkg-config.exe statically built version 0.23,放在/usr/local/bin那邊
  • 安裝DirectX開發檔案

  • 要建構SDL,我們必須安裝directx開發檔案:
    cd /usr/local
    wget -c http://www.libsdl.org/extras/win32/common/directx-devel.tar.gz
    tar xf directx-devel.tar.gz
    rm directx-devel.tar.gz

    建構zlib

    zlib是一個壓縮函式庫。

    執行下面的命令來建構跟安裝zlib dll:

    cd $LOCALBUILDDIR && 
    wget -c http://www.zlib.net/zlib-1.2.5.tar.gz && 
    tar xzf zlib-1.2.5.tar.gz && 
    cd zlib-1.2.5 && 
    sed 's/-O3/-O3 -mms-bitfields/' win32/Makefile.gcc >Makefile.gcc

    在我們開始建構之前我們需要些修正dll匯出定義檔,假如我們沒有,之後的libxml2會建構失敗。

    cat >> win32/zlib.def << "EOF"
        gzopen64
        gzseek64
        gztell64
        gzoffset64
        adler32_combine64
        crc32_combine64
    EOF

    繼續建構dll:

    make IMPLIB='libz.dll.a' -fMakefile.gcc && 
    install zlib1.dll $LOCALDESTDIR/bin && 
    install libz.dll.a $LOCALDESTDIR/lib && 
    install libz.a $LOCALDESTDIR/lib && 
    install zlib.h $LOCALDESTDIR/include && 
    install zconf.h $LOCALDESTDIR/include

    注意:zlib.pc必須手動建立然後安裝到$LOCALDESTDIR/lib/pkgconfig/

  • 註(2011/01/11):這裡我不知為何這樣做,但是我會建議照本篇參考文件Compiling GTK+ 2.20.x for Windows with MinGW來做,你需要用rm –rf zlib-1.2.5來刪除整個資料夾,再重新用tar zxvf zlib-1.2.5.tar.gz來解壓縮,照這樣的指令來操作:
  • make -f win32/Makefile.gcc
    cp -iv zlib1.dll /usr/local/bin
    cp -iv zconf.h zlib.h /usr/local/include
    cp -iv libz.a /usr/local/lib
    cp -iv libzdll.a /usr/local/lib/libz.dll.a
    雖然不知為何這樣做,但是這樣做,可能可以編譯成功GTK+

建構nasm

Netwide Assembler。

執行下面命令來建構跟安裝nasm:

cd $LOCALBUILDDIR && 
wget -c http://www.nasm.us/pub/nasm/releasebuilds/2.09.03/nasm-2.09.03.tar.gz && 
tar xzf nasm-2.09.03.tar.gz && 
cd nasm-2.09.03 && 
./configure --prefix=$LOCALDESTDIR && 
make && 
make install

建構SDL

簡單的直接媒體層(Simple Direct Media Layer)是一個跨平台的應用程式架構。

執行下面命令來建構跟安裝SDL:

cd $LOCALBUILDDIR && 
wget -c http://www.libsdl.org/release/SDL-1.2.14.tar.gz && 
tar xzf SDL-1.2.14.tar.gz && 
cd SDL-1.2.14 && 
./configure --prefix=$LOCALDESTDIR && 
make && 
make install

執行下面命令建構SDL測試程式:

cd test && 
./configure && 
make

執行SDL測試程式:

SDL_VIDEODRIVER=windib testvidinfo
cat stdout.txt
SDL_VIDEODRIVER=directx testvidinfo
cat stdout.txt
testplatform
cat stdout.txt
testdyngl

建構libpng

libng是PNG檔案格式函式庫。

執行下面命令來建構跟安裝libpng:

cd $LOCALBUILDDIR && 
wget -c http://downloads.sourceforge.net/libpng/libpng-1.4.4.tar.gz && 
tar xzf libpng-1.4.4.tar.gz && 
cd libpng-1.4.4 && 
./configure --prefix=$LOCALDESTDIR && 
make && 
make install

建構libjpeg

libjpg是JPEG檔案格式函式庫。

執行下面命令來建構跟安裝libjpeg:

cd $LOCALBUILDDIR && 
wget -c http://www.ijg.org/files/jpegsrc.v8b.tar.gz && 
tar zxf jpegsrc.v8b.tar.gz && 
cd jpeg-8b && 
./configure --prefix=$LOCALDESTDIR --enable-shared --enable-static && 
make && 
make install

建構libtiff

libtiff是TIFF檔案格式函式庫。

執行下面命令來建構跟安裝libtiff:

cd $LOCALBUILDDIR && 
wget -c ftp://ftp.remotesensing.org/pub/libtiff/tiff-3.9.4.tar.gz && 
tar xzf tiff-3.9.4.tar.gz && 
cd tiff-3.9.4 && 
./configure --prefix=$LOCALDESTDIR && 
make && 
make install

建構SDL_image

SDL_image是簡單的直接媒體層(Simple Direct Media Layer)的影像支援函式庫。

執行下面命令來建構跟安裝SDL_image:

cd $LOCALBUILDDIR && 
wget -c http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz && 
tar xzf SDL_image-1.2.10.tar.gz && 
cd SDL_image-1.2.10 && 
./configure --prefix=$LOCALDESTDIR && 
make && 
make install

建構OpenAL Soft

OpenAL Soft是OpenAL 3D音效API的實作。

執行下面命令來建構跟安裝OpenAL Soft:

cd $LOCALBUILDDIR && 
wget -c http://kcat.strangesoft.net/openal-releases/openal-soft-1.12.854.tar.bz2 && 
tar xjf openal-soft-1.12.854.tar.bz2 && 
cd openal-soft-1.12.854 && 
cd build && 
cmake -DCMAKE_INSTALL_PREFIX:PATH=$LOCALDESTDIR -G "MSYS Makefiles" .. && 
make && 
make install

建構smpeg

smpeg是mpeg檔案格式函式庫

執行下面命令來建構跟執行smpeg:

cd $LOCALBUILDDIR && 
svn co -r 389 svn://svn.icculus.org/smpeg/trunk smpeg-389 && 
cd smpeg-389 && 
./autogen.sh && 
./configure --prefix=$LOCALDESTDIR --enable-mmx --disable-gtk-player 
            --disable-opengl-player --disable-gtktest  && 
make CXXLD='$(CXX) -no-undefined' && 
make install

建構libogg

libogg是ogg位元流格式函式庫

執行下面命令來建構跟安裝libogg:

cd $LOCALBUILDDIR && 
wget -c http://downloads.xiph.org/releases/ogg/libogg-1.2.1.tar.gz && 
tar xzf libogg-1.2.1.tar.gz && 
cd libogg-1.2.1 && 
LDFLAGS='-mwindows' ./configure --prefix=$LOCALDESTDIR && 
make  && 
make install

建構libvorbis

libvorbis是vorbis音訊格式函式庫

執行下面命令來建構跟安裝libogg(註:看到這裡作者都只用複製貼上的功能來做了,應該是libvorbis,我想你應該很害怕了吧):

cd $LOCALBUILDDIR && 
wget -c http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.2.tar.gz && 
tar xzf libvorbis-1.3.2.tar.gz && 
cd libvorbis-1.3.2 && 
LDFLAGS='-mwindows' ./configure --prefix=$LOCALDESTDIR && 
make LIBS='-logg' && 
make install

建構SDL_mixer

SDL_mixer是簡單的直接媒體層(Simple Direct Media Layer )的音效支援函式庫

執行下面命令來建構跟安裝libogg

cd $LOCALBUILDDIR && 
wget -c http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11.tar.gz && 
tar xzf SDL_mixer-1.2.11.tar.gz && 
cd SDL_mixer-1.2.11 && 
./configure --prefix=$LOCALDESTDIR && 
make && 
make install

注意:假如你沒有更新msys bash套件,建構會失敗。

註(ㄚ琪):如果你有C:Program FilesSQLLIBINCLUDE之類的INCLUDE的環境變數設定的話,在make的時後會錯誤,所以請注意!

建構curl

curl是一個使用URL語法來傳輸資料的命令列工具

執行下面命令建構跟安裝curl:

cd $LOCALBUILDDIR && 
wget -c http://curl.haxx.se/download/curl-7.21.2.tar.gz && 
tar xzf curl-7.21.2.tar.gz && 
cd curl-7.21.2 && 
./configure --prefix=$LOCALDESTDIR --without-ssl && 
make && 
make install

建構pdcurses

Public Domain Curses是curses函式庫的實作

執行下面命命來建構跟安裝pdcurses:

cd $LOCALBUILDDIR && 
wget -c http://downloads.sourceforge.net/project/pdcurses/pdcurses/3.4/PDCurses-3.4.tar.gz  && 
tar xzf PDCurses-3.4.tar.gz  && 
cd PDCurses-3.4  && 
cd win32  && 
cat mingwin32.mak | sed 's|exp-|/exp-|g' > mingwin32.new  && 
mv mingwin32.new mingwin32.mak  && 
cat mingwin32.mak | sed 's|type|cat|g' > mingwin32.new  && 
mv mingwin32.new mingwin32.mak  && 
cat mingwin32.mak | sed 's|copy|cp|g' > mingwin32.new  && 
mv mingwin32.new mingwin32.mak  && 
cat mingwin32.mak | sed 's|del|rm|g' > mingwin32.new  && 
mv mingwin32.new mingwin32.mak  && 
make -f mingwin32.mak libs  && 
install pdcurses.a $LOCALDESTDIR/lib/libpdcurses.a  && 
make -f mingwin32.mak clean  && 
make -f mingwin32.mak DLL=Y libs  && 
install pdcurses.dll $LOCALDESTDIR/bin  && 
cd ..  && 
install curses.h $LOCALDESTDIR/include

注意:在install指令碼裡sed lines使用他們的UNIX相同的命令來取代DOS命令。

建構freeglut

freeglut是一個OpenGL 工具包的免費實作

執行下面的命令來建構跟安裝freeglut:

cd $LOCALBUILDDIR && 
wget -c http://downloads.sourceforge.net/project/freeglut/freeglut/freeglut-2.6.0.tar.gz && 
tar xzf freeglut-2.6.0.tar.gz && 
cd freeglut-2.6.0 && 
./configure --prefix=$LOCALDESTDIR && 
make && 
make install

執行freeglut demos來測試你的建構:

cd progs/demos/one
one

註:這次的編譯失敗,而且很難解決,甚至可以說我無能解決,最主要是make到demo的程式裡有錯誤

c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: warning: –

-export-dynamic is not supported for PE targets, did you mean –export-all-symbo

ls?

CallbackMaker-CallbackMaker.o:CallbackMaker.c:(.text+0x3f): 未定義參考到「_imp__

glutBitmapString@8」

…(以下略)

看起來是使用–export-dynamic不支援,所以我改用–export-all-symbols同樣是錯,最後只好參考Using GLUT with MinGW的作法,個別編譯demos裡的程式,這樣是可以執行one的,但是不敢保證是否會影響程式的寫作,因為感覺這個套件沒有裝好!

註(2011/01/07):今天又重新跑來解決這個問題,我改用很多人說的,重跑一次autogen.sh,這個很好用,接下來的configure、make、make install都對了!

建構bullet

Bullet是碰撞偵測跟物理層的函式庫

執行下面的命令來建構跟安裝bullet:

cd $LOCALBUILDDIR && 
wget -c http://bullet.googlecode.com/files/bullet-2.77.tgz && 
tar xzf bullet-2.77.tgz && 
cd bullet-2.77 && 
./autogen.sh && 
./configure --prefix=$LOCALDESTDIR --disable-demos && 
make && 
make install

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

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