1. clutter介绍
clutter是开源的图形库,可以用来做图形动画。参照官方的说法,它被用在MeeGo,Chromium OS等平台上,用它来做2D动画特效,应该是不错的选择。clutter单词的本意是混乱的意思,从编译过程来看,它确实够"混乱"的。
2. 编译clutter
按照惯例,从编译开始研究。我下的是一个最新的稳定版clutter-1.2.12.tar.bz2。在源代码包的build/mingw目录中,README文件介绍了如何编译,mingw-cross-compile.sh脚本用来配置编译clutter需要的依赖头文件,库等。本文主要参照了README文件进行编译,其中加入了我编译时遇到的问题。
1)安装MinGW
MinGW为交叉编译环境,下载地址参见这里。依次下载和安装如下文件:
MinGW-5.1.6.exe
MSYS-1.0.11.exe
msysDTK-1.0.1.exe
当然你可以下载最新的版本,只要前缀一致就行了。安装MSYS会需要制定MinGW的路径,按提示输入即可,此处假设MSYS安装目录为c:/msys/1.0,所有的编译根目录为/clutter-work。下面提到的目录若不存在,则需要创建。
2)安装wget
wget工具可以用来在MinGW中获取软件包。首先下载wget-1.9.1-mingwPORT.tar.bz2,将其放置到/clutter-work/downloads目录下,参照如下的指令即可实现安装。值得注意的是/usr/src/wget-1.9.1目录需要创建,否则会提示该目录不存在(Linux下的东西,总要留下点问题让你自己解决:-))。
cd /clutter-work/downloads
tar -jvxf wget-1.9.1-mingwPORT.tar.bz2
cd wget-1.9.1/mingwPORT
mkdir -p /usr/src/wget-1.9.1
PATH="$PATH":"$PWD" ./mingwPORT.sh
3)安装unzip
unzip工具用来解压后面下载的文件包,你需要到这里下载并安装到默认目录。
4)安装依赖库
这一步只需要执行clutter源代码中的mingw-cross-compile.sh脚本,将mingw-cross-compile.sh拷贝到/clutter-work/downloads目录下。该脚本实际上包含了三部分内容,下载依赖库,解压依赖库,安装clutter。第三步可以注掉,第一步需要进行修改,参见如下代码。添加了对已下载的依赖包的判断,若存在则跳过,否则执行该段脚本会出错。如果下载出错,需要手动下载对应的文件包。
### Download files### :: set download dir to judge whether the tarball is exist.DOWNLOAD_DIR=/clutter-work/downloadsfor bin in "${TOR_BINARIES[@]}"; dobn="${bin##*/}";
if [ -e "$DOWNLOAD_DIR/$bn" ]then#read -n1 -p "echo..."
echo "$bn" is exist
else
#read -n1 -p "download..."
download_file "$TOR_URL/$bin" "$bn"fidone;for dep in "${TOR_DEPS[@]}"; doif [ -e "$DOWNLOAD_DIR/$dep" ]thenecho "$dep" is exist
else
download_file "$TOR_DEP_URL/$dep" "$dep";fidone;for dep in "${OTHER_DEPS[@]}"; dobn="${dep##*/}";
if [ -e "$DOWNLOAD_DIR/$bn" ]thenecho "$bn" is exist
else
download_file "$dep" "$bn";fidone;for dep in "${GNUWIN32_DEPS[@]}"; doif [ -e "$DOWNLOAD_DIR/${dep}" ]thenecho "$dep" is exist
else
download_file "$GNUWIN32_URL/$dep" "$dep";fidone;
执行mingw-cross-compile.sh脚本的命令为:
cd /clutter-work
PATH="$PATH:/c/Program Files/GnuWin32/bin" /
sh ./downloads/mingw-cross-compile.sh
5)安装pkg-config
此步只需执行如下命令即可:
cd /clutter-work/downloads
wget 'http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz'
tar -zvxf pkg-config-0.23.tar.gz
cd pkg-config-0.23
prefix=/clutter-work/clutter-cross
libdir="${prefix}/lib"
includedir="${prefix}/include"
CFLAGS="-g -O2 -Wall -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include" /
LDFLAGS="-L${libdir} -lglib-2.0 -lintl -liconv" /
./configure
make all install
6)编译和安装clutter
如果上面一切顺利的话,就可以编译clutter了。将clutter-1.2.12.tar.bz2复制到/clutter-work/downloads目录,然后执行如下命令。
cd /clutter-work/downloads
tar -jvxf downloads/clutter-1.2.12.tar.bz2
cd clutter-1.2.12
PKG_CONFIG_PATH=/clutter-work/clutter-cross/lib/pkgconfig /
PATH="$PATH:/clutter-work/clutter-cross/bin" /
CFLAGS="-mms-bitfields -I/clutter-work/clutter-cross/include -g -O2 -Wall" /
./configure --prefix=/clutter-work/clutter-cross --with-flavour=win32
make all install
如果没有任何出错提示的话就表示编译成功了。我在编译的过程中出现了libpng12-0.dll找不到的提示框,libpng12-0.dll可以到这里下载,然后复制到C:/msys/1.0/clutter-work/clutter-cross/bin目录,并将目录添加到PATH中。编译完成后可以到/clutter-work/clutter-1.2.12目录下查找.exe文件,有些是可运行的,有些则不能,能运行的就当是hello world吧,能运行就有希望。
另:我在编译的时候还遇到automake相关工具的错误,此时只要按提示下载对应工具的最新版即可。