什么是交叉編譯
交叉編譯 是在一個平臺上生成臨海一個平臺可執行代碼.
eg.在windows上面編寫C51代碼,并編譯生成可執行代碼。如xx.hex
我們在Ubuntu上編寫樹莓派的代碼,并編譯成可執行代碼。a.out.
是在樹莓派上運行,不在Ubuntu Linux上面運行。
編譯:在一個平臺上生成該平臺上的可執行代碼
為什么交叉編譯
平臺上不允許或不能夠安裝我們所需要的編譯器,如C51
1、平臺資源匱乏,無法運行所需要的編譯器
2、樹莓派也需要交叉編譯,、樹莓派有時又是因為目的平臺還沒有建立,連操作系統都沒有,根本談不上運行什么編譯器。操作系統也是代碼,也要編譯!
平臺運行需要至少兩樣東西:boot loader 以及操作系統核心
宿主機(host)編輯和編譯程序的平臺,一般是基于X86的pc機,也被稱為主機
目標機(target)用戶開發的系統,通常是非x86平臺。host編輯得到可執行的代碼在target上運行
交叉編譯工具鏈配置
關于編譯
編譯是指將源代碼文件(如C/C++文件)經過預處理、編譯、匯編和鏈接等步驟,轉換為可執行文件的過 程。將源代碼轉換成機器代碼的過程稱為編譯(Compile),編譯的工作需要編譯器(Complier)來完成
本地編譯
本地編譯是指在當前的編譯平臺上,生成能在當前平臺上運行的可執行文件
交叉編譯
交叉編譯是指在當前的編譯平臺上,生成能在體系結構不同的另一種目標平臺上運行的可執行文件。
環境配置
想要在x86平臺上進行交叉編譯,并在ARM平臺上運行這個程序。首先需要在家目錄下的.bashrc最后配 置添加交叉編譯工具鏈:
export PATH=$PATH://home/pg/Desktop/orange-build/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin
在x86平臺可以編譯出arm平臺的?
aarch64-none-linux-gnu-gcc -o hello1 hello.c
用file查看文件編譯出來的程序是ARM aarch64的二進制程序
pg@pg:~/Desktop$ file hello1
hello1: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, with debug_info, not stripped