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 Files\SQLLIB\INCLUDE之类的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

Comments are closed.