#!/bin/sh
# $Id: autogen.sh,v 1.3 2005/02/26 01:47:22 kergoth Exp $ autoreconf -f -i -I `pwd`/m4 exit $? echo -n "Libtoolize..." libtoolize --force --copy echo "Done." echo -n "Aclocal..." aclocal echo "Done." echo -n "Autoheader..." autoheader echo "Done." echo -n "Automake..." automake --add-missing --copy echo "Done." echo -n "Autoconf..." autoconf echo "Done." #./configure $* echo "Now you can do ./configure, make, make install."--------------------------------------------------------------
正式发布的软件包里,已经有做好的configure脚本了。接下来我们要做的就是利用configure进行配置。对于交叉编译来说,最重要的配置选项有以下几个:
--host:指定目标机的平台类型。一般格式为CPU类型-操作系统名称。比如,目标机的CPU为arm,操作系统为linux,可以这样写--host=arm-linux。
--prefix:这是安装路径的前缀,即编译结果放置的位置。默认值是/usr或者/usr/local,交叉编译时不能使用默认值,否则它会覆盖你本机的文件,所以要指定一个路径。比如,可以指定为--prefix=/work/cross/rootfs/usr。
配置完成后,运行make编译,运行make install安装。
(pkg-config也是一个非常重要的工具,关于pkg-config的使用,可以参考笔者另外一篇文章,这里不再多说。)
[二.文档惯例及隐含前提]:
--------------------------------------------------------------
交叉编译器名称:arm-linux-gcc
交叉编译器版本:3.4.3
目标操作系统版本:2.6.9
默认依赖关系:依赖glibc
隐含环境变量:
WORK_DIR:工作目录,设置为/work/cross
ROOTFS_DIR:编译结果根目录,设置为$WORK_DIR/rootfs
ARCH:目标平台的体系架构,设置为arm
--------------------------------------------------------------
建立一个脚本用于设置变量和建立必要的目录,在编译前,先运行. corss.env。 其内容如下:
cross.env
export WORK_DIR=/work/cross
export ROOTFS_DIR=$WORK_DIR/rootfs
export ARCH=arm
export PKG_CONFIG_PATH=$ROOTFS_DIR/usr/local/lib/pkgconfig:$ROOTFS_DIR/usr/lib/pkgconfig:$ROOTFS_DIR/usr/X11R6/lib/pkgconfig
if [ ! -e "$ROOTFS_DIR/usr/local/include" ]; then mkdir -p $ROOTFS_DIR/usr/local/include;fi;
if [ ! -e "$ROOTFS_DIR/usr/local/lib" ]; then mkdir -p $ROOTFS_DIR/usr/local/lib; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/etc" ]; then mkdir -p $ROOTFS_DIR/usr/local/etc; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/bin" ]; then mkdir -p $ROOTFS_DIR/usr/local/bin; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/share" ]; then mkdir -p $ROOTFS_DIR/usr/local/share; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/man" ]; then mkdir -p $ROOTFS_DIR/usr/local/man; fi;
if [ ! -e "$ROOTFS_DIR/usr/include" ]; then mkdir -p $ROOTFS_DIR/usr/include; fi;
if [ ! -e "$ROOTFS_DIR/usr/lib" ]; then mkdir -p $ROOTFS_DIR/usr/lib; fi;
if [ ! -e "$ROOTFS_DIR/usr/etc" ]; then mkdir -p $ROOTFS_DIR/usr/etc; fi;
if [ ! -e "$ROOTFS_DIR/usr/bin" ]; then mkdir -p $ROOTFS_DIR/usr/bin; fi;
if [ ! -e "$ROOTFS_DIR/usr/share" ]; then mkdir -p $ROOTFS_DIR/usr/share; fi;
if [ ! -e "$ROOTFS_DIR/usr/man" ]; then mkdir -p $ROOTFS_DIR/usr/man; fi;
颜色字体含义
颜色字体 表示错误信息。
颜色字体 表示命令行脚本。
颜色字体 表示文件内容。
--------------------------------------------------------------
文档格局:
1. 基本信息:
软件名称
功能简述
下载地址
软件版本
依赖关系
前置条件
2. 过程分析
构建过程中遇到的问题分析。
3. 构建处方
通常是一个可用的Makefile,用它可以编译这个模块。或者一些patch文件。
[三。编译tslib]:
1. 基本信息:
软件名称
tslib
功能简述
tslib是一个触摸屏的库,它提供诸如滤波、去抖、校准之类的功能,为不同的触摸屏提供了一个统一的接口。
下载地址
export VSROOT=:pserver:cvs@pubcvs.arm.linux.org.uk:/mnt/src/cvsroot
cvs login
cvs co tslib
软件版本
2006-3-28 cvs版本
依赖关系
默认
前置条件
源文件位置:$(WORK_DIR)/tslib
2. 过程分析
因为是cvs版本,所以先要生成configure脚本,tslib提供了一个autogen.sh文件,自然是用autogen.sh去产生了。运行:
[root@linux tslib]# ./autogen.sh
出现了如下错误:
: bad interpreter: No such file or directory
打开autogen.sh文件,发现了没有任何错误,猜想可能是一些不可见的非法字符引起的,用二进制方式打开该文件,发现它是dos格式的。需要转换成unix格式的。
索性用dos2unix把整个目录都转一遍。另外发现没有NEWS README AUTHORS 三个文件,为了避免出错,产生三个空文件:
[root@linux tslib]# touch NEWS README AUTHORS。
重新运行:
[root@linux tslib]# ./autogen.sh
一切OK!
-------------------------------------------------------------------
现在来做真正的配置:
[root@linux tslib]# ./configure --host=$ARCH-linux --prefix=$ROOTFS_DIR/usr
配置成功,但make时,出现下列错误:
ts_test.o(.text+0x218): In function `main':
: undefined reference to `rpl_malloc'