Rust程序交叉編譯到aarch64(armv8)目標


https://kkua.github.io/post/cross-compile-rust-to-aarch64/

不同ARM交叉編譯工具鏈區別

“arm生態發展與交叉編譯工具鏈選擇”一文對ARM交叉編譯工具鏈介紹得比較詳細,以下引用該文章“交叉編譯鏈選擇”部分內容,更多詳細介紹請查看原文

免費版目前有三大主流工具商提供,第一是GNU(提供源碼,自行編譯制作),第二是****Codesourcery,第三是Linora。

收費版有ARM原廠提供的armcc、IAR提供的編譯器等等,因為這些價格都比較昂貴,不適合學習用戶使用,所以不做講述。

arm-none-linux-gnueabi-gcc:是 Codesourcery 公司(目前已經被Mentor收購)基於GCC推出的的ARM交叉編譯工具。可用於交叉編譯ARM(32位)系統中所有環節的代碼,包括裸機程序、u-boot、Linux kernel、filesystem和App應用程序。

arm-linux-gnueabihf-gcc:是由 Linaro 公司基於GCC推出的的ARM交叉編譯工具。可用於交叉編譯ARM(32位)系統中所有環節的代碼,包括裸機程序、u-boot、Linux kernel、filesystem和App應用程序。

aarch64-linux-gnu-gcc:是由 Linaro 公司基於GCC推出的的ARM交叉編譯工具。可用於交叉編譯ARMv8 64位目標中的裸機程序、u-boot、Linux kernel、filesystem和App應用程序。

arm-none-elf-gcc:是 Codesourcery 公司(目前已經被Mentor收購)基於GCC推出的的ARM交叉編譯工具。可用於交叉編譯ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。

arm-none-eabi-gcc:是 GNU 推出的的ARM交叉編譯工具。可用於交叉編譯ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。

安裝交叉編譯工具鏈

  1. 訪問Linaro官網下載最新的適合我們機器的交叉工具鏈版本,由於我使用的是Windows所以選擇下載mingw32版本

  2. 解壓交叉編譯工具鏈到合適的位置

  3. 設置環境變量。把工具鏈bin目錄的路徑加入path環境變量

配置Rust環境

  1. 運行命令rustup target add aarch64-unknown-linux-gnu,添加aarch64-unknown-linux-gnu rust toolchain到系統
  2. 修改cargo的config文件,配置新的目標架構
1
2
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
  1. 最后cargo build時需要添加參數--target aarch64-unknown-linux-gnu 。若是想要省略該參數則需要對config作如下的修改,以改變默認的構建目標
1
2
[build]
target = "aarch64-unknown-linux-gnu"
  1. 另外,也可以給build --target aarch64-unknown-linux-gnu 命令設置別名從而縮短構建命令。比如按下面的方式修改config文件后,就可以使用cargo build_aarch64來構建程序了
1
2
[alias]
build_aarch64 = "build --target aarch64-unknown-linux-gnu"

至此,我們就得到了適用於aarch64-unknown-linux環境的二進制可執行目標文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM