<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 交叉編譯場(chǎng)景分析(arm-linux)(一)

交叉編譯場(chǎng)景分析(arm-linux)(一)

——
作者: 時(shí)間:2007-04-17 來(lái)源: 收藏
1.         基本知識

在linux下,絕大部分的軟件包都是用autoconf配置的。除此之外,比較有名的就是X11的imake配置方式,imake實(shí)際上有點(diǎn)過(guò)時(shí)了,用起來(lái)很不方便,所以xfree86已經(jīng)計劃向autoconf移植了。還有極少的直接使用Makefile編譯,通過(guò)環(huán)境變量或者不同的Makefile配置,當然這只適用于簡(jiǎn)單的軟件包。

 

Autoconf是一個(gè)非常有用的配置工具,原理有點(diǎn)復雜,全面了解它要花不少時(shí)間,但使用很方便。這里簡(jiǎn)單介紹一下autoconf交叉編譯的基本知識。

 

下載軟件包無(wú)非兩種方式,一種是直接從cvs里取最新版本,另一種是取發(fā)布的穩定版本。除非你想測試最新版本,否則后者是比較安全的方式。但有的軟件包不提供發(fā)布的版本,這時(shí)就只能退而求其次了-使用cvs版本了。

 

編譯cvs版本有一點(diǎn)不同,cvs版本通常不帶configure腳本的,自己要重新產(chǎn)生configure腳本。當然這并不困難,多數開(kāi)發(fā)人員都會(huì )在自己的軟件包里,放上一個(gè)autogen.sh或者bootstartup之類(lèi)的腳本。利用這個(gè)腳本可以自動(dòng)產(chǎn)生configure腳本。下面是一個(gè)autogen.sh腳本示例,若軟件包里沒(méi)有提供這樣的文件,可以仿照寫(xiě)一個(gè):

 

#!/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."

 

正式發(fā)布的軟件包里,已經(jīng)有做好的configure腳本了。接下來(lái)我們要做的就是利用configure進(jìn)行配置。對于交叉編譯來(lái)說(shuō),最重要的配置選項有以下幾個(gè):

 

--host:指定目標機的平臺類(lèi)型。一般格式為CPU類(lèi)型-操作系統名稱(chēng)。比如,目標機的CPU為arm,操作系統為linux,可以這樣寫(xiě)--host=arm-linux。

--prefix:這是安裝路徑的前綴,即編譯結果放置的位置。默認值是/usr或者/usr/local,交叉編譯時(shí)不能使用默認值,否則它會(huì )覆蓋你本機的文件,所以要指定一個(gè)路徑。比如,可以指定為--prefix=/work/cross/rootfs/usr。

 

配置完成后,運行make編譯,運行make install安裝。

 

(pkg-config也是一個(gè)非常重要的工具,關(guān)于pkg-config的使用,可以參考筆者另外一篇文章,這里不再多說(shuō)。)

 

2.         文檔慣例及隱含前提:

 

交叉名稱(chēng):arm-linux-gcc

交叉版本:3.4.3

目標操作系統版本:2.6.9

默認依賴(lài)關(guān)系:依賴(lài)glibc

 

隱含環(huán)境變量:

WORK_DIR:工作目錄,設置為/work/cross

ROOTFS_DIR:編譯結果根目錄,設置為$WORK_DIR/rootfs

ARCH:目標平臺的體系架構,設置為arm

 

建立一個(gè)腳本用于設置變量和建立必要的目錄,在編譯前,先運行. 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;

 

顏色字體含義

顏色字體 表示錯誤信息。

顏色字體 表示命令行腳本。

顏色字體 表示文件內容。

 

文檔格局: 

 
基本信息:
軟件名稱(chēng),功能簡(jiǎn)述,下載地址,軟件版本,依賴(lài)關(guān)系,前置條件 

2 過(guò)程分析

構建過(guò)程中遇到的問(wèn)題分析。

3 構建處方

通常是一個(gè)可用的Makefile,用它可以編譯這個(gè)模塊?;蛘咭恍﹑atch文件。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>