交叉編譯工具鏈-及arm-linux-androideabi-gcc編譯方法
一、編譯器:
就是將“高階語言”翻譯為“機器語言(低階語言)”的程式。一個現代編譯器的主要工作流程:原始碼 (source code) → 前處理器 (preprocessor) → 編譯器 (compiler) → 彙編程式 (assembler) → 目的碼 (object code) → 連結器 (Linker) → 可執行程式 (executables)
二、交叉編譯器:
在一種計算機環境中執行的編譯程式,能編譯出在另外一種環境下執行的程式碼,我們就稱這種編譯器支援交叉編譯。這個編譯過程就叫交叉編譯。簡單地說,就是在一個平臺上生成另一個平臺上的可執行程式碼。這裡需要注意的是所謂平臺,實際上包含兩個概念:
三、交叉編譯工具鏈(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, 即嵌入式應用二進位制介面,是描述可連線目的碼,庫目的碼,
五、arm-linux-androideabi-gcc解釋及編譯方法
在linux作業系統下編譯能在arm平臺android系統上執行的C庫或程式的交叉編譯工具鏈編譯工具
編譯arm平臺android系統上執行的C庫的方法:
1、通過eclipse工具的NDK,通過修改android.mk檔案來實現。
2、在linux系統中通過交叉編譯工具進行編譯