交叉編譯工具鏈製作

2021-08-08 16:49:59 字數 4537 閱讀 4087



交叉編譯就是在乙個平台上生成另乙個平台上的可執行

二進位制。這兩個平台可以是不同的體系結構和不同的作業系統。例如,在嵌入式系統

c/c++

開發過程中,常常需要在

x86/x86_64

主機上編譯出可執行程式,給

arm或

powerpc

體系結構的裝置執行。

交叉編譯的兩個概念:

宿主機(host

):編譯程式

的平台,一般是基於

x86的

pc機,通常也稱為主機。

目標機(target

):使用者開發軟體所執行的裝置,通常都是非

x86平台。

host

編譯生成的

可執行程式

在target

上執行。

交叉編譯工具鏈是乙個由編譯器、鏈結器和直譯器組成的綜合開發環境,主要由binutils

、gcc

和glibc

三個部分組成,安裝在宿主機

host

上。其中,

binutils

主要生成一些輔助工具;

gcc是用來生成交叉編譯器,而

glibc

主要提供使用者程式所依賴的一些基本函式庫。

1.1

建立工作目錄

構建交叉編譯工具時,建議使用非root

使用者,防止出現覆蓋問題。可以通過

useradd -d

命令先新增普通使用者如

hlz,然後執行:

cd $home

mkdir ppc

cd ppc

mkdir tools sources

cd sources

1.2

binutils-2.19.tar.bz2  #

glibc-2.9.tar.bz2      #

glibc-linuxthreads-2.5.tar.bz2  #

gcc-4.4.2.tar.bz2      # ,

linux-2.6.31.tar.bz2   

# kernel headers

gmp-4.3.1.tar.bz2      

# gcc

mpfr-2.4.1.tar.bz2     

# gcc

1.3

設定環境變數

export target=powerpc-linux

export tools=~/ppc/tools

export sources=~/ppc/sources

export lc_all=c

cd $sources

tar -jxvf linux-2.6.31.tar.bz2

cd linux-2.6.31

#把核心標頭檔案安裝到$tools/$target/usr/include

中。make arch=powerpc install_hdr_path=$tools/$target/usr header_install

ls -p $tools/$target/usr/include   

# 檢查安裝結果

asm/ asm-generic/ drm/ linux/ mtd/ rdmal/scsi/ sound/ video/ xem/

安裝binutils工具,該binutils用於目標平台。

cd $sources

tar -jxvf binutils-2.19.tar.bz2

mkdir binutils-build

cd binutils-build

../binutils-2.19/configure --prefix=$tools --target=$target

make

make install

ls -p $tools       

# 檢查安裝結果

bin/ info/ lib/ man/ powerpc-linux/ share/

在第一次安裝gcc

之前,先安裝兩個依賴庫

gmp和

mpfr

:tar -jxvf gmp-4.3.1.tar.bz2

cd gmp-4.3.1

./configure --enable-cxx --enable-mpbsd--prefix=/usr   

# 預設為/usr/local

make

make check

sudo make install

tar -jxvf mpfr-2.4.1.tar.bz2

./configure --enable-thread-safe --prefix=/usr

make

make check

sudo make install

如安裝正常,則進行gcc

第一次安裝:

tar -jxvf gcc-4.4.2.tar.bz2

mkdir gcc-bootstrap-build

cd gcc-bootstrap-build

../gcc-4.4.2/configure --target=$target --prefix=$tools --disable-nls --disable-shared --disable-mutilib --disable-decimal-float --disable-threads --disable-libmudflap --disable-libssp --disable-libgomp --without-headers --enable-language=c --with-newlib

make all-gcc

make install-gcc   

#把編譯好的gcc

安裝到$tools/bin

和/$target/bin #

編譯安裝gcc

庫make all-target-libgcc

#把gcc

庫檔案及標頭檔案安裝到

$tools/lib/$target/$gcc_version/

目錄下。

make install-target-libgcc

使用上面新安裝的gcc編譯,該glibc用於目標平台。

cd $sources

tar -jxvf glibc-2.9.tar.bz2

tar -jxvf glibc-linuxthreads-2.5.tar.bz2 --directory=glibc-2.9

編譯前修改glibc-2.9

的makeconfig:

修改:gnulib := -lgcc $(libgcc_eh)

static-gnulib := -lgcc -lgcc_eh $(libunwind)

為:gnulib := -lgcc

static-gnulib := -lgcc

mkdir glibc_build

cd glibc_build

cc=$tools/bin/$-gcc ../glibc-2.9/configure --host=$target --build=$(../glibc-2.9/scripts/config.guess) --with-headers=$tools/$target/usr/include --with-binutils=$tools/$target/powerpc-linux/bin --disable-profile --enable-add-ons libv_cv_forced_unwind=yes libc_cv_c_cleanup=yes --includedir=/usr/include --prefix=/usr/ --enable-add-ons=linuxthreads --enable-add-ons=nptl

make

make install_root=$tools/$target/prefix="" install

vi $tools/$target/lib/libc.so

修改:group( /lib/libc.so.6/lib/libc_nonshared.a) 為:

group( libc.so.6 libc_nonshared.a)

目標平台的glibc庫已完備,接下來編譯乙個完整的gcc交叉工具鏈。

cd $sources

mkdir gcc-full-build

cd gcc-full-build

../gcc-4.4.2/configure --target=$target --host=$(../gcc-4.4.2/config.guess) --prefix=$tools --with-headers=$tools/$target/usr/include --enable-language=c,c++ --disable-libgomp

make all

make install

首次構建交叉編譯工具鏈過程中,難免因系統環境、開源軟體版本等差異出現各種各樣的問題,具體問題需要各位耐心地具體分析,多搜尋多查閱。只有盡可能多地發現並解決問題,才能不斷的領悟,並在後續製作交叉編譯工具鏈的過程中少走彎路。

製作交叉編譯工具鏈 1

交叉編譯環境是由編譯器 聯結器和直譯器組合成的綜合開發環境。交叉編譯工具主要包括針對目標系統的編譯器gcc 目標系統的二進位制工具binutils 目標系統的標準c庫glibc和目標系統的linux核心標頭檔案 安裝上述檔案,並設定變數 prefix 指定可執行程式的安裝路徑 執行configure...

製作交叉編譯工具鏈 2

解壓crosstool ng tar jxvf crosstool ng 1.23.0 檢查依賴,完成依賴檢查後生成makefile configure prefix home forlinx crosstool install 編譯,編譯成功後進行安裝 make make install 新增環境...

用Crosstool 製作交叉編譯工具鏈

解壓到downloads資料夾 apt get install bison apt get install flex 二 進入解壓後的crosstool vim demo arm softflaot.sh 修改如下兩行 tarballs dir home downloads 所需安裝包儲存目錄 re...