12. 虽然这次编译通过了,但不免以后会忘记这个过程,特别是当程序更加复杂的时候,因此我
们要养成好习惯,把整个过程构建为一个脚本,以后只要执行这个脚本就可以完成所有步骤
了,如图所示是 PC 版本 madplay 的构建脚本,该脚本位于 madplay 工作目录的根目录:
#!/bin/sh
#This build script is for madplay under PC-Linux
MADPLAY_DIR=/opt/FriendlyARM/QQ2440/madplay
SRC_DIR=src-x86
TARGET_DIR=$MADPLAY_DIR/target-x86
tar xvzf ./tarball/libid3tag-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/libmad-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/madplay-0.15.2b.tar.gz -C $SRC_DIR
cd $SRC_DIR/libid3tag-0.15.1b
./configure --prefix=$TARGET_DIR
make;make install
cd ../../
cd $SRC_DIR/libmad-0.15.1b
./configure --prefix=$TARGET_DIR
make;make install
cd ../..
cd $SRC_DIR/madplay-0.15.2b
./configure --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include
LDFLAGS=-L$TARGET_DIR/lib
make;make install
cd ../../
(7)构建并修正 ARM 版本的编译脚本 build-arm
既然我们已经构建了一个简单易用的编译脚本,现在就可以通过对它稍作修改来进行
交叉编译了,这就是通常所说的移植。简单的移植只要重新指定一下编译器就可以了,可以
通过修改环境变量来实现。很多的移植所要修改的环境变量是
CC 编译器,系统默认为 gcc,
AR 库工具,用以创建和修改库,系统默认 ar
LD 链接器,系统默认为 LD
第 - 252 - 页
13. RANLIB 随机库创建器,系统默认为 ranlib
AS 汇编器,系统默认为 as
NM 库查看工具,系统默认为 nm
还有一些不常用的其他环境变量,在此就不一一列举了。
需要注意的是,并不是每个移植都需要做全面的环境变量修改,有些是不需要改的,
这要根据实际情况,也就是系统提示信息来调整。
除了要修改编译器环境变量,一般还需要在配置中加入目标平台指定标识,在此为
“arm-linux”,修改后的脚本如下:
#!/bin/sh
MADPLAY_DIR=/opt/FriendlyARM/QQ2440/madplay
SRC_DIR=src-arm
TARGET_DIR=$MADPLAY_DIR/target-arm
tar xvzf ./tarball/libid3tag-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/libmad-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/madplay-0.15.2b.tar.gz -C $SRC_DIR
export CC=arm-linux-gcc
cd $SRC_DIR/libid3tag-0.15.1b
./configure --host=arm-linux --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include
LDFLAGS=-L$TARGET_DIR/lib
make;make install
cd ../../
cd $SRC_DIR/libmad-0.15.1b
./configure --host=arm-linux --prefix=$TARGET_DIR
make;make install
cd ../..
cd $SRC_DIR/madplay-0.15.2b
./configure --host=arm-linux --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include
LDFLAGS=-L$TARGET_DIR/lib
make;make install
cd ../../
cd ../../
现在我们直接运行一下该脚本,看结果,如图:
第 - 253 - 页
14. 根据提示,可以推断 libid3tag 库没有被正确编译出来,再根据更上的提示信息,我们
得知该库还依赖于一个叫做“zlib”的库,为什么 PC 版本的没有这个问题呢,是因为我们所
使用的 PC Linux 系统中已经有了这个库。因此我们从网上搜索到该库的源代码包,下载下来
放到 tarball 目录中,并在编译脚本中参考其他库在相应位置加入以下部分:
tar xvzf ./tarball/zlib-1.2.3.tar.gz -C $SRC_DIR
cd $SRC_DIR/zlib-1.2.3
./configure --prefix=$TARGET_DIR
make && make install
cd ../..
再次执行编译脚本,这次顺利编译通过,最后在 target-arm/bin 目录中可以看到交叉编
译生成的 madplay,使用 file 命令检查一下,如图:
第 - 254 - 页