1. 程式人生 > >交叉編譯工具鏈-及arm-linux-androideabi-gcc編譯方法

交叉編譯工具鏈-及arm-linux-androideabi-gcc編譯方法

一、編譯器:

     就是將“高階語言”翻譯為“機器語言(低階語言)”的程式。一個現代編譯器的主要工作流程:原始碼 (source code) → 前處理器 (preprocessor) → 編譯器 (compiler) → 彙編程式 (assembler) → 目的碼 (object code) → 連結器 (Linker) → 可執行程式 (executables)

二、交叉編譯器

   在一種計算機環境中執行的編譯程式,能編譯出在另外一種環境下執行的程式碼,我們就稱這種編譯器支援交叉編譯。這個編譯過程就叫交叉編譯。簡單地說,就是在一個平臺上生成另一個平臺上的可執行程式碼。這裡需要注意的是所謂平臺,實際上包含兩個概念:

體系結構(Architecture)、作業系統(Operating System)。同一個體系結構可以執行不同的作業系統;同樣,同一個作業系統也可以在不同的體系結構上執行。

三、交叉編譯工具鏈(cross compilation tool chain)

工具鏈是一套工具,包括gcc,binutils,c庫等,交叉編譯工具鏈就是為交叉編譯準備的工具鏈。要進行交叉編譯,我們需要在主機平臺上安裝對應的交叉編譯工具鏈,然後用這個交叉編譯工具鏈編譯我們的原始碼,最終生成可在目標平臺上執行的程式碼。

常用在ARM平臺的GNU Toolchain:

 arm-linux-gcc:交叉編譯linux核心

arm-elf-gcc:主要交叉編譯uclinux核心

arm-uclinux-gcc:交叉編譯uclinux核心

交叉編譯環境的組成:

binutils工具包:包括聯結器、彙編器以及其他用於目標檔案和檔案的工具,如as彙編器,ld聯結器等。

gcc工具包:工具鏈的主角,包括c編譯器gcc、c++編譯器g++等。

glibc庫:提供系統呼叫的基本函式的C庫,比如,printf、open等。

gdb除錯工具:執行在target上的除錯程式,通過串列埠和TCP/IP和主機連線,進行遠距離除錯。

四、EABI ABI

EABI:Embedded application binary interface, 即嵌入式應用二進位制介面,是描述可連線目的碼,庫目的碼,

可執行檔案影像,如何連線,執行和除錯,以及目的碼生成過程,和c, c++語言介面的規範,是編譯連線工具的基礎規範.

五、arm-linux-androideabi-gcc解釋及編譯方法

在linux作業系統下編譯能在arm平臺android系統上執行的C庫或程式的交叉編譯工具鏈編譯工具
編譯arm平臺android系統上執行的C庫的方法:

1、通過eclipse工具的NDK,通過修改android.mk檔案來實現。

2、在linux系統中通過交叉編譯工具進行編譯