當前位置:首頁 » 編程軟體 » linux下交叉編譯命令

linux下交叉編譯命令

發布時間: 2023-05-05 11:22:03

1. 如何建立linux下的ARM交叉編譯環境

這個過程如下
1. 下載源文件、補丁和建立編譯的目錄
2. 建立內核頭文件
3. 建立二進制工具(binutils)
4. 建立初始編譯器(bootstrap gcc)
5. 建立c庫(glibc)
6. 建立全套編譯器(full gcc)
下載源文件、補丁和建立編譯的目錄
1. 選定軟體版本號
選擇軟體版本號時,先看看glibc源代碼中的INSTALL文件。那裡列舉了該版本的glibc編譯時所需的binutils 和gcc的版本號。例如在 glibc-2.2.3/INSTALL 文件中推薦 gcc 用 2.95以上,binutils 用 2.10.1 以上版本。
我選的各個軟體的版本是:
linux-2.4.21+rmk2
binutils-2.10.1
gcc-2.95.3
glibc-2.2.3
glibc-linuxthreads-2.2.3
如果你選的glibc的版本號低於2.2,你還要下載一個叫glibc-crypt的文件,例如glibc-crypt-2.1.tar.gz。 Linux 內核你可以從www.kernel.org 或它的鏡像下載。
Binutils、gcc和glibc你可以從FSF的ftp站點ftp://ftp.gun.org/gnu/ 或它的鏡像去下載。在編譯glibc時,要用到 Linux 內核中的 include 目錄的內核頭文件。如果你發現有變數沒有定義而導致編譯失敗,你就改變你的內核版本號。例如我開始用linux-2.4.25+vrs2,編譯glibc-2.2.3 時報 BUS_ISA 沒定義,後來發現在 2.4.23 開始它的名字被改為 CTL_BUS_ISA。如果你沒有完全的把握保證你改的內核改完全了,就不要動內核,而是把你的 Linux 內核的版本號降低或升高,來適應 glibc。
Gcc 的版本號,推薦用 gcc-2.95 以上的。太老的版本編譯可能會出問題。Gcc-2.95.3 是一個比較穩定的版本,也是內核開發人員推薦用的一個 gcc 版本。
如果你發現無法編譯過去,有可能是你選用的軟體中有的加入了一些新的特性而其他所選軟體不支持的原因,就相應降低該軟體的版本號。例如我開始用 gcc-3.3.2,發現編譯不過,報 as、ld 等版本太老,我就把 gcc 降為 2.95.3。太新的版本大多沒經過大量的測試,建議不要選用。

2. 建立工作目錄
首先,我們建立幾個用來工作的目錄:
在你的用戶目錄,我用的是用戶liang,因此用戶目錄為 /home/liang,先建立一個項目目錄embedded。
$pwd
/home/liang
$mkdir embedded

再在這個項目目錄 embedded 下建立三個目錄 build-tools、kernel 和 tools。
build-tools-用來存放你下載的 binutils、gcc 和 glibc 的源代碼和用來編譯這些源代碼的目錄。
kernel-用來存放你的內核源代碼和內核補丁。
tools-用來存放編譯好的交叉編譯工具和庫文件。
$cd embedded
$mkdir build-tools kernel tools

執行完後目錄結構如下:
$ls embedded
build-tools kernel tools

3. 輸出和環境變數
我們輸出如下的環境變數方便我們編譯。
$export PRJROOT=/home/liang/embedded
$export TARGET=arm-linux
$export PREFIX=$PRJROOT/tools
$export TARGET_PREFIX=$PREFIX/$TARGET
$export PATH=$PREFIX/bin:$PATH

如果你不慣用環境變數的,你可以直接用絕對或相對路徑。我如果不用環境變數,一般都用絕對路徑,相對路徑有時會失敗。環境變數也可以定義在.bashrc文件中,這樣當你logout或換了控制台時,就不用老是export這些變數了。
體系結構和你的TAEGET變數的對應如下表

你可以在通過glibc下的config.sub腳本來知道,你的TARGET變數是否被支持,例如:
$./config.sub arm-linux
arm-unknown-linux-gnu

在我的環境中,config.sub 在 glibc-2.2.3/scripts 目錄下。
網上還有一些 HOWTO 可以參考,ARM 體系結構的《The GNU Toolchain for ARM Target HOWTO》,PowerPC 體系結構的《Linux for PowerPC Embedded Systems HOWTO》等。對TARGET的選取可能有幫助。
4. 建立編譯目錄
為了把源碼和編譯時生成的文件分開,一般的編譯工作不在的源碼目錄中,要另建一個目錄來專門用於編譯。用以下的命令來建立編譯你下載的binutils、gcc和glibc的源代碼的目錄。
$cd $PRJROOT/build-tools
$mkdir build-binutils build-boot-gcc build-gcc build-glibc gcc-patch

build-binutils-編譯binutils的目錄
build-boot-gcc-編譯gcc 啟動部分的目錄
build-glibc-編譯glibc的目錄
build-gcc-編譯gcc 全部的目錄
gcc-patch-放gcc的補丁的目錄
gcc-2.95.3 的補丁有 gcc-2.95.3-2.patch、gcc-2.95.3-no-fixinc.patch 和gcc-2.95.3-returntype-fix.patch,可以從 http://www.linuxfromscratch.org/ 下載到這些補丁。
再將你下載的 binutils-2.10.1、gcc-2.95.3、glibc-2.2.3 和 glibc-linuxthreads-2.2.3 的源代碼放入 build-tools 目錄中
看一下你的 build-tools 目錄,有以下內容:
$ls
binutils-2.10.1.tar.bz2 build-gcc gcc-patch
build-binutls build-glibc glibc-2.2.3.tar.gz
build-boot-gcc gcc-2.95.3.tar.gz glibc-linuxthreads-2.2.3.tar.gz

建立內核頭文件
把你從 www.kernel.org 下載的內核源代碼放入 $PRJROOT /kernel 目錄
進入你的 kernel 目錄:
$cd $PRJROOT /kernel

解開內核源代碼
$tar -xzvf linux-2.4.21.tar.gz


$tar -xjvf linux-2.4.21.tar.bz2

小於 2.4.19 的內核版本解開會生成一個 linux 目錄,沒帶版本號,就將其改名。
$mv linux linux-2.4.x

給 Linux 內核打上你的補丁
$cd linux-2.4.21
$patch -p1 < ../patch-2.4.21-rmk2

編譯內核生成頭文件
$make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
你也可以用 config 和 xconfig 來代替 menuconfig,但這樣用可能會沒有設置某些配置文件選項和沒有生成下面編譯所需的頭文件。推薦大家用 make menuconfig,這也是內核開發人員用的最多的配置方法。配置完退出並保存,檢查一下的內核目錄中的 include/linux/version.h 和 include/linux/autoconf.h 文件是不是生成了,這是編譯 glibc 是要用到的,version.h 和 autoconf.h 文件的存在,也說明了你生成了正確的頭文件。
還要建立幾個正確的鏈接
$cd include
$ln -s asm-arm asm
$cd asm
$ln -s arch-epxa arch
$ln -s proc-armv proc

接下來為你的交叉編譯環境建立你的內核頭文件的鏈接
$mkdir -p $TARGET_PREFIX/include
$ln -s $PRJROOT/kernel/linux-2.4.21/include/linux $TARGET_PREFIX/include/linux
$in -s $PRJROOT/kernel/linux-2.4.21/include/asm-arm $TARGET_PREFIX/include/asm

也可以把 Linux 內核頭文件拷貝過來用
$mkdir -p $TARGET_PREFIX/include
$cp -r $PRJROOT/kernel/linux-2.4.21/include/linux $TARGET_PREFIX/include
$cp -r $PRJROOT/kernel/linux-2.4.21/include/asm-arm $TARGET_PREFIX/include

建立二進制工具(binutils)
binutils是一些二進制工具的集合,其中包含了我們常用到的as和ld。
首先,我們解壓我們下載的binutils源文件。
$cd $PRJROOT/build-tools
$tar -xvjf binutils-2.10.1.tar.bz2

然後進入build-binutils目錄配置和編譯binutils。
$cd build-binutils
$../binutils-2.10.1/configure --target=$TARGET --prefix=$PREFIX

--target 選項是指出我們生成的是 arm-linux 的工具,--prefix 是指出我們可執行文件安裝的位置。
會出現很多 check,最後產生 Makefile 文件。
有了 Makefile 後,我們來編譯並安裝 binutils,命令很簡單。
$make
$make install

看一下我們 $PREFIX/bin 下的生成的文件
$ls $PREFIX/bin
arm-linux-addr2line arm-linux-gasp arm-linux-objmp arm-linux-strings
arm-linux-ar arm-linux-ld arm-linux-ranlib arm-linux-strip
arm-linux-as arm-linux-nm arm-linux-readelf
arm-linux-c++filt arm-linux-obj arm-linux-size

我們來解釋一下上面生成的可執行文件都是用來干什麼的
add2line - 將你要找的地址轉成文件和行號,它要使用 debug 信息。
Ar-產生、修改和解開一個存檔文件
As-gnu 的匯編器
C++filt-C++ 和 java 中有一種重載函數,所用的重載函數最後會被編譯轉化成匯編的標號,c++filt 就是實現這種反向的轉化,根據標號得到函數名。
Gasp-gnu 匯編器預編譯器。
Ld-gnu 的連接器
Nm-列出目標文件的符號和對應的地址
Obj-將某種格式的目標文件轉化成另外格式的目標文件
Objmp-顯示目標文件的信息
Ranlib-為一個存檔文件產生一個索引,並將這個索引存入存檔文件中
Readelf-顯示 elf 格式的目標文件的信息
Size-顯示目標文件各個節的大小和目標文件的大小
Strings-列印出目標文件中可以列印的字元串,有個默認的長度,為4
Strip-剝掉目標文件的所有的符號信息

建立初始編譯器(bootstrap gcc)
首先進入 build-tools 目錄,將下載 gcc 源代碼解壓
$cd $PRJROOT/build-tools
$tar -xvzf gcc-2.95.3.tar.gz

然後進入 gcc-2.95.3 目錄給 gcc 打上補丁
$cd gcc-2.95.3
$patch -p1< ../gcc-patch/gcc-2.95.3.-2.patch
$patch -p1< ../gcc-patch/gcc-2.95.3.-no-fixinc.patch
$patch -p1< ../gcc-patch/gcc-2.95.3-returntype-fix.patch
echo timestamp > gcc/cstamp-h.in

在我們編譯並安裝 gcc 前,我們先要改一個文件 $PRJROOT/gcc/config/arm/t-linux,把
TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC
這一行改為
TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h
你如果沒定義 -Dinhibit,編譯時將會報如下的錯誤
http://www.cnblogs.com/gcc-2.95.3/gcc/libgcc2.c:41: stdlib.h: No such file or directory
http://www.cnblogs.com/gcc-2.95.3/gcc/libgcc2.c:42: unistd.h: No such file or directory
make[3]: *** [libgcc2.a] Error 1
make[2]: *** [stmp-multilib-sub] Error 2
make[1]: *** [stmp-multilib] Error 1
make: *** [all-gcc] Error 2

2. linux交叉編譯

這種特殊用的編譯器放在任何地方都可以。
只要能和本機的編譯器分開就行了。

不過有的交叉編譯器限制目錄的,因為裡面的程序是使用絕對路徑來調用功能的,錯了地方會導致調用出錯,如果調用了本機的東西,就全亂了……

至於 command not found 。就要看你的交叉編譯器目錄的設置了。按你現在的目錄,一般 gcc 在/opt/host/armv41/arm-unknown-linux/bin 裡面。並不是真的全在一個 bin 裡面(這裡面只有 binutils 的東西)。

當然也不絕對。都要具體情況具體分析了。

3. 如何在linux虛擬機里安裝交叉編譯

安裝Arm-Linux交叉編譯器正確的方法:
首先我用的是天嵌自帶的交叉編譯器EABI-4.3.3_EmbedSky_20100610.tar.bz2,
1. 首先建一個存放交叉編譯器的目錄,我建的目錄的絕對路徑是:/opt/TQ (TQ就是我建的目錄)
2. 解壓EABI-4.3.3_EmbedSky_20100610.tar.bz2:
tar xjvf EABI-4.3.3_EmbedSky_20100610.tar.bz2

該文件解壓後,就會在TQ這個目錄中生成兩個目錄:opt,usr;
3. 添加環境變數 :
在/etc/profile中添加
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /opt/TQ/opt/EmbedSky/4.3.3/bin/
fi
添加完後 source /etc/profile 使他生效;
4. 在控制台執行以下命令:
cp /opt/TQ/opt/EmbedSky/4.3.3/bin /usr/local/arm

總結:第3步和第4步這兩步少了一步就會出現以下錯誤:
arm-none-linux-gnueabi-gcc: error trying to exec 'cc1': execvp: No such file or directory

經驗:若在解壓時 用下面的命令:
tar xjvf EABI-4.3.3_EmbedSky_20100610.tar.bz2 -C/

就可以省去第四步
-C / :的意識是解壓到指定目錄,這里指根目錄,由於該壓縮包內部的目錄結構本身包含usr/local/arm,所以解壓到根目錄實際上就是把文件解壓到/usr/local/arm文件夾下。

4. 如何編譯/交叉編譯內核模塊, Linux 2.6.

欏�build 能夠編譯內核樹目錄內的內核模塊,也能夠編譯內核樹目錄外的內核模塊(外部內核模塊)。. 編譯外部內核模塊的命令: #cd #make -C M=`pwd` 其中 為要編譯的內核模塊所在目錄, 為內核源碼所在的目錄。 對於發行版本的Linux ,可以用: #make -C /lib/moles/`uname -r`/build M=`pwd` 注意:使用Kbuild 之前,必須先成功編譯過內核源碼。 說明: .#make -C M=`pwd` moles 作用與上面的命令一樣 .以前的內核版本州頃碧可以使用 #make -C SUBDIRS=`pwd` moles. 安裝外部內核模塊 #make -C M=`pwd` moles_install 默認安裝目錄為:/lib/moles/`uname -r`/extra ,可以通過INSTALL_MOD_PATH 宏在默認安裝路徑前加前綴。 例如: #make -C INSTALL_MOD_PATH=/opt M=`pwd` moles_install 則編譯後的模塊會放在/冊舉opt/lib/moles/`uname -r`/extra 通過宏INSTALL_MOD_DIR 可以修改是否放在'extra' 下,例如: #make -C INSTALL_MOD_DIR=golf M=`pwd` moles_install 則編譯後的模塊會放在/lib/moles/`uname -r`/golf . 編譯單個文件 #make -C M=`pwd` . 其他命令 #make -C M=`pwd` clean #make -C M=`pwd` help.Kbuild 文件 Linux的Kbuild 會在內核模塊目錄下查找Kbuild 文件,如果有,則在編譯時會使用該文件。示例: 假設有這么幾個文件:8123_if.c 8123_if.h 8123_pci.c 8123_bin.o_shipped( 二進制的模塊文件) Kbuild 文件的內容: obj-m := 8123.o 8123-y:8123_if.o 8123_pci.o 8123_bin.o Makefile的內容: #為了兼容舊版本的Kbuild ifneq($(KERNELRELEASE),) include Kbuildelse# 正常的Makefile KDIR:=/lib/moles/`uname -r`/buildall::$(MAKE) -C $(KDIR) M=`pwd` $@ # 其他targetgenbin:echo "X" > 8123_bin_shippedendif 注意,沒有源碼的二進制.o 文件必須乎裂以原文件名加_shipped 結尾,例如8123_bin.o_shipped,KBuild 會把8123_bin.o_shipped 復制為8123_bin.o ,然後一起編譯。 應該用: ifeq ($(obj),) obj= .

5. 如何建立Linux下的ARM交叉編譯環境

首先安裝交叉編譯器,網路「arm-linux-gcc」就可以一個編譯器壓縮包。
把壓縮包放到linux系統中,解壓,這樣就算安裝好了交叉編譯器。
設置編譯器環境變數,具體方式網路。如打開 /etc/bash.bashrc,添加剛才安裝的編譯器路徑 export PATH=/home/。。。/4.4.3/bin:$PATH。這樣是為了方便使用,用arm-linux-gcc即可,不然既要帶全路徑/home//bin/arm-linux-gcc,這樣不方便使用。
編譯c文件。和gcc編譯相似,把gcc用arm-linu-gcc代替就是了。編譯出來的就可以放到arm上運行了。</ol>

6. 如何以靜態鏈接方式交叉編譯linux上的軟體n

在編譯命令行中,將使用的靜態庫文件放在源文件後面就可以了。比如:
gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop
其中-L/usr/lib指定庫文件的查找路徑,編譯器默認在當前目錄下先查找指定的庫文件。

7. linux里opencv怎麼交叉編譯

一、交叉編譯opencv 構造: 下載:各個庫的下載可以直接搜名字到官網下載 幾個關鍵解釋: 「--prefix=」 後邊跟make install時的位置,本例中,libz在make install時將安裝到/usr/arm-linux-gnueabihf中 「--host=」 後邊跟arm-linux表明使用的是ARM環境 有configure的才能進行configure配置 4)所有的makefile修改類似 Libz的交叉編譯 第一步:# ./configure --prefix=/usr/arm-linux-gnueabihf --shared 第二步:修改makefile,主要有下邊幾個,修改的時候通篇參照即可 CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar rc RANLIB=arm-linux-gnueabihf-ranlib STRIP = arm-linux-gnueabihf-strip 如果有ARCH的話,ARCH=ARM 第三步:#sudo make #sudo make install Libjpeg的交叉編譯 第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc 第二步:參考1)中方法修改makefile 第三步:#sudo make #sudo make install Libpng的交叉編譯 第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc 第二步:參考1)中方法修改makefile 第三步:#sudo make #sudo make install Yasm的交叉編譯 第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static 第二步:修改makefile 第三步:#sudo make #sudo make install Libx264的交叉編譯 第一步:#CC=arm-linux-gnueabihf-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/usr/arm-linux-gnueabihf 第二步:修改config.mak里的參數,因為makefile要調用config.mak,所以修改方法同makefile 第三步:#sudo make #sudo make install Libxvid的交叉編譯 第一步:首先切換目錄 #cd build/generic 第二步:#./configure --prefix=/usr/arm-linux-gnueabihf --host=arm-linux --disable-assembly 第三步:#sudo make #sudo make install ffmpeg的交叉編譯 第一步: ./configure --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-yasm --disable-stripping --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/arm-linux-gnueabihf/include --extra-ldflags=-L/usr/arm-linux-gnueabihf/lib --prefix=/usr/arm-linux-gnueabihf 第二步:修改makefile文件 第三步:#sudo make #sudo make install 第四步:將ffmpeg加入pkg-config 執行#sudo gedit /etc/bash.bashrc,在末尾加入 export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/arm-linux-gnueabihf /lib/pkgconfig export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/usr/arm-linux-gnueabihf /lib/ 完畢後使用命令:#source /etc/bash.bashrc 或者單獨使用三個export,不過壽命只在一個終端中,終端關閉時就失效。 幾個關鍵解釋:--extra-flags指向xvid的安裝路徑,--extra-ldflags指向x264的路徑 安裝cmake-gui 執行:#sudo apt-get install cmake-qt-gui Opencv的交叉編譯 第一步:修改opencv/platflrms/linux/目錄下的arm-gnueabi.toolchain.cmake,將其所有刪掉,寫入: set( CMAKE_SYSTEM_NAME Linux ) set( CMAKE_SYSTEM_PROCESSOR arm ) set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc ) set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ ) 第二步:在opencv目錄下新建build目錄,進入build目錄,執行命令: #cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ../ 這時,要保證出現: 第三步:使用cmake-gui打開CMakeCache.txt,去掉所有的無關項,修改CMAKE_INSTALL_PREFIX,來確定make install的目錄 第四步:#sudo make #sudo make install 可能出現的錯誤: opencv編譯不通過,出現skip之類的,說明ffmpeg沒編譯好,或者其編譯好了,但是pkg-config沒有設置好,一定要設置好其環境 前邊幾步不通過的話,看看命令有沒有少,或者有沒有修改好makefile 在arm上使用時,一種方法時直接將編譯好的opencv目錄下的lib文件拷貝到開發板對應的/lib目錄下,其他或者拷貝到自己指定的目錄,並設置好環境變數即可使用

8. 如何使Linux在交叉編譯工具安裝配置並立即生效

第一、解壓你下載的ARM-LINUX-GCC交叉編譯工具
#tar xvzf arm-linux-gcc-4.3.2.tar.gz -C /
(需要注意的是,在大寫字母後面有一個空格)
第二、利用vi編輯器打開/etc/profile文件,並在下面的位置中添加一句話:pathmunge /opt/FriendlyARM//opt/FriendlyARM/toolschain/4.4.3/bin
(注意:該處的/opt/FriendlyARM//opt/FriendlyARM/toolschain/4.4.3/bin根據各人的交叉編譯工具解壓後所存放的位置而不同)
#vim /etc/profile
# Path manipulation
if [ $EUID = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /opt/FriendlyARM//opt/FriendlyARM/toolschain/4.4.3/binfi第三、執行下列的命令即可是剛才的配置生效
#source /etc/profile
最後你就可以檢測自己的交叉編譯環境是否安裝成功。可以輸入下面的命令來檢查:

9. Linux系統中如何安裝交叉編譯器

交叉編譯器通常以 arm-none-linux-gnueabi.tar.bz2 這樣的名稱發布(不同廠家的不同開發平台,交叉編譯工具鏈的實際名稱可能有所差別,請以實際為准),解壓命令:
vmuser@Linux-host: ~$ tar xjvf arm-none-linux-gnueabi.tar.bz2
如果希望解壓到一個指定的目錄,可以先將 arm-none-linux-gnueabi.tar.bz2 壓縮包復制到目標目錄,然後進入目標目錄再運行解壓命令,也可以在任意目錄解壓,通過-C 指定目標目錄。假定希望解壓到「/home/ctools/」目錄,則命令如下:
vmuser@Linux-host: ~$ tar xjvf arm-none-linux-gnueabi.tar.bz2 -C /home/ctools/

在終端中添加環境變數,需要每次打開終端都設置,也很麻煩。可以考慮將設置的過程添加到系統配置文件中。/etc/profile 是系統全局的配置文件,在該文件中設置交叉編譯器的路徑,能夠讓登錄本機的全部用戶都可以使用這個編譯器。
打開終端,輸入「sudo vi /etc/profile」命令,打開/etc/profile 文件,在文件末尾添加:
export PATH=$PATH:/home/ctools/arm-2011.03/bin/
然後輸入「. /etc/profile」(點+空格+文件名),執行 profile 文件,使剛才的改動生效。如果沒有書寫錯誤,此時打開終端,輸入 arm-none-linux-gnueabi-,然後按鍵盤 TAB 鍵,同樣可以看到很多 arm-none-linux-gnueabi-開頭的命令。
這些周立功那邊很多的,不知道你有沒去看過。

10. 如何交叉編譯開源庫

所謂的搭建交叉編譯環境,即安裝、配置交叉編譯工具鏈。在該環境下編譯出嵌入式Linux系統所需的操作系統、應用程序等,然後再上傳到目標機上。
交叉編譯工具鏈是為了編譯、鏈接、處理和調試跨平台體系結構的程序代碼。對於交叉開發的工具鏈來說,在文件名稱上加了一個前綴,用來區別本地的工具鏈。例如,arm-linux-表示是對arm的交叉編譯工具鏈;arm-linux-gcc表示是使用gcc的編譯器。除了體系結構相關的編譯選項以外,其使用方法與Linux主機上的gcc相同,所以Linux編程技術對於嵌入式同樣適用。不過,並不是任何一個版本拿來都能用,各種軟體包往往存在版本匹配問題。例如,編譯內核時需要使用arm-linux-gcc-4.3.3版本的交叉編譯工具鏈,而使用arm-linux-gcc-3.4.1的交叉編譯工具鏈,則會導致編譯失敗。
那麼gcc和arm-linux-gcc的區別是什麼呢?區別就是gcc是linux下的C語言編譯器,編譯出來的程序在本地執行,而arm-linux-gcc用來在linux下跨平台的C語言編譯器,編譯出來的程序在目標機(如ARM平台)上執行,嵌入式開發應使用嵌入式交叉編譯工具鏈。

工具/原料
電腦系統:win7系統。虛擬機系統:workstation6.5 。虛擬機安裝的linux版本:fedora9.0。內核:linux2.6.25 。
方法/步驟
1
我使用的交叉編譯工具鏈是arm-linux-gcc-4.4.3,把它放在linux系統的路徑是圖一

2
在linux系統的路徑/home/song/share下放了交叉編譯工具鏈arm-linux-gcc-4.4.3的壓縮包,另一個版本的不用。有的人可能會問到怎麼把這個壓縮包弄到虛擬機的linux的系統的,我是通過samba服務從主機復制到虛擬機的,這里的share文件夾就是我samba伺服器的工作目錄,多了不說,這不是重點。
然後通過命令mkdir embedded 建立一個arm-linux-gcc的安裝目錄,如圖二所示。當然安裝路徑和目錄名稱「embedded」可以依自己的喜好而定。
步驟閱讀
然後通過命令將share文件夾下的arm-linux-gcc-4.4.3.tar.gz復制到這里的embedded文件夾下, 當然這里你也可以不進行這一步我這是為了方便以後管理,將arm-linux-gcc安裝到embedded文件夾下,方便以後尋找。

然後使用tar命令:tar zxvf arm-gcc-4.4.3.tar.gz將embedded文件夾下的arm-linux-gcc-4.4.3.tar.gz解壓縮安裝到當前目錄下

執行完解壓縮命令,就已經將交叉編譯工具鏈arm-linux-gcc-4.4.3安裝到linux系統上了,這里默認安裝到了圖六所示的路徑上。

接下來配置系統環境變數,把交叉編譯工具鏈的路徑添加到環境變數PATH中去,這樣就可以在任何目錄下使用這些工具。 vi /etc/profile 編輯profile文件,添加環境變數。

在profile中的位置處,添加圖八所示的紅線標注的一行,路徑就是圖六中的紅線標注的路徑後面加上/4.4.3/bin。

圖八中的路徑一定是你自己的安裝路徑,可以使用pwd命令查找一下那個bin目錄的路徑。添加完路徑後,保存退出。接下來使用命令:source /etc/profile,是修改後的profile文件生效,如圖九所示。

然後,使用命令:arm-linux-gcc -v查看當前交叉編譯鏈工具的版本信息,如圖九中的紅線標注第③行所示。很明顯 可以看到,如果不執行第②步,則查看版本信息不成功。
然後驗證交叉編譯工具鏈是否安裝成功並且可以使用,如圖九所示,隨便找一個目錄編輯一個hello源代碼。

編輯好hello.c文件後,保存退出。然後使用交叉編譯器對hello.c進行編譯,並生成可執行文件hello

這里生成的hello文件並不能像gcc編譯出來的文件那樣直接使用「./hello」命令執行並顯示內容 因為它是一個二進制文件,只能下載到開發板上執行!

至此,搭建交叉編譯環境步驟結束。

熱點內容
樹莓派自帶ftp開啟 發布:2025-07-07 21:11:41 瀏覽:49
智慧樹用腳本會怎麼樣 發布:2025-07-07 21:05:48 瀏覽:514
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:535
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:32
linux485 發布:2025-07-05 14:38:28 瀏覽:310
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:760
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:437
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:736
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:249
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:696