交叉编译场景(arm(2)

#!/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'

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwwjjg.html