什么是交叉編譯
交叉編譯是指在一個平臺上生成可以在另一個平臺上執(zhí)行的代碼。由于不同的體系結(jié)構(gòu)有不同的指令系統(tǒng)。因此,不同的cpu需要有相應(yīng)的編譯器,而交叉編譯就如同翻譯一樣,把相同的程序代碼翻譯成不同的cpu的對應(yīng)的可執(zhí)行的二進制文件。
交叉編譯鏈安裝
建立交叉編譯環(huán)境又可分為安裝SDK(其中包含了交叉編譯工具鏈)和設(shè)置交叉編譯環(huán)境變量。
SDK路徑:EF1開發(fā)板資料包/06-常用工具/06-1 編譯工具安裝腳本/fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.0.sh
將上述資料拷貝到ubuntu系統(tǒng)的/home/elf目錄下。
并在該目錄下執(zhí)行:
elf@ubuntu:~$?sudo?./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.0.sh |
命令行會提示:Enter target directory for SDK (default: /opt/fsl-imx-x11/4.1.15-2.0.0)
連續(xù)兩次按下回車鍵,程序?qū)詣影惭b交叉編譯工具鏈(交叉編譯工具鏈安裝一次即可,更換終端或重啟系統(tǒng)不必重新安裝)。安裝過程中一定要保證網(wǎng)絡(luò)暢通,Ubuntu系統(tǒng)可以訪問外網(wǎng)。
等待SDK安裝,如下圖通過打印信息可以看出安裝成功。
交叉編譯鏈使用
設(shè)置環(huán)境變量
注意:
- 設(shè)置環(huán)境變量之后,只要不更換終端,下次再編譯就不需要重新設(shè)置。
- 如果重新打開新終端或者切換賬戶,編譯前需要重新設(shè)置環(huán)境變量。
設(shè)置編譯環(huán)境主要是指定目標架構(gòu)和交叉編譯工具鏈,以及編譯過程中使用到的一些庫的路徑等,使用如下命令配置(.后邊有空格):
. /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi |
然后使用命令arm-poky-linux-gnueabi-gcc -v判斷是否設(shè)置成功(注:-v前邊有空格)。正常情況下會打印出gcc的版本信息:gcc version 5.3.0 (GCC),
編譯helloworld
在講“GCC編譯器”章節(jié),使用ubuntu的GCC編譯器編譯生成了hello_ubuntu程序,在此章節(jié),將使用安裝的開發(fā)板的交叉編譯器編譯同一個hello.c文件,生成hello_board程序,使用file文件可以看出兩個交叉編譯器的不同。
注意:執(zhí)行環(huán)境變量后,交叉編譯工具重命名為CC,在編譯程序時需要用$CC。