apache arm 交叉编译_MacOS 下交叉编译的折腾笔记
這是這個系列 “折騰筆記” 的第一篇,希望能用更直白的方式去展現交叉編譯的時候做了些什么。因此,這個教程并不是最佳實踐,但是可以讓小伙伴們有一個更直白的理解。之后,我會把筆記的重點放在 bazel 上交叉編譯的最佳實踐,并配一些小的實踐案例,如交叉編譯能在樹莓派上運行的含有深度學習模型的小程序。
PS:個人平時用的電腦的系統是 MacOS,值得一提的是 MacOS 不等于 Linux。它的交叉編譯其實有很多坑,比如 tensorflowlite 中提供的交叉編譯的工具或 Linaro 只能在 Linux 下通過。因此,個人建議 MacOS 下的交叉編譯方式為采用 docker 運行 Linux 系統然后進行交叉編譯。關于交叉編譯的小理解與實踐思路
交叉編譯其實就是使用能夠把代碼源碼轉換為目標平臺機器語言的編譯器。比如,樹莓派的就需要的是不是 x86 的 gcc 而是支持 arm 處理器的 arm-linux-gnueabihf-gcc。那么是不是我們把相關的依賴環境搞過來就可以編譯了呢?我個人認為是的,于是進行一番調研,還真的發現了一個想法相似的教程。這個方法的核心就是把樹莓派上的環境拷過來,然后使用 llvm 結合 arm-linux-gnueabihf-binutils 進行交叉編譯。
實踐步驟
使用 brew 安裝一些依賴項
brew install arm-linux-gnueabihf-binutils llvm rsync # brew 的管網安裝腳本如下 、 # /bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"從樹莓派上拷過來相關的 gcc 和其相關環境
rsync -rzLR --safe-links pi@raspberrypi:/usr/lib/arm-linux-gnueabihf pi@raspberrypi:/usr/lib/gcc/arm-linux-gnueabihf pi@raspberrypi:/usr/include pi@raspberrypi:/lib/arm-linux-gnueabihf sysroot/ # 這里面的 pi 是樹莓派的 ip 或者 ssh 別名。 # raspberrypi 是樹莓派中的用戶名 # 如,gpu@deamov 代表著 ssh 的別名為 gpu,deamov 是我的用戶檢查下當前的目錄
. ├── hello_cross_compile.cc └── sysroot # 這個就是我們剛才用 rsync 傳過來的根目錄├── lib└── usrhello_cross_comile.cc 的內容如下
#include <iostream>using namespace std;int main(int argc, char *argv[]) {cout << "Hello ResPi compiled by MacOS" << endl;return 0; }使用 llvm 進行交叉編譯
執行如下命令 (扔到一個 .sh 文件里),即可生成可以在樹莓派下執行的文件 hello 。之后拷到樹莓派上就可以成功執行了。
HOME=`pwd` # 設置 $HOME 為當前目錄 `brew --prefix llvm`/bin/clang++ --target=arm-linux-gnueabihf --sysroot $HOME/sysroot -isysroot=$HOME/sysroot -isystem $HOME/sysroot/usr/include/c++/8 -isystem $HOME/sysroot/usr/include/arm-linux-gnueabihf/c++/8 -L$HOME/sysroot/usr/lib/gcc/arm-linux-gnueabihf/8 -Wl,--rpath-link $HOME/sysroot/lib/arm-linux-gnueabihf -B$HOME/sysroot/usr/lib/gcc/arm-linux-gnueabihf/8 --gcc-toolchain=`brew --prefix arm-linux-gnueabihf-binutils` -o hello ./hello_cross_compile.cc -v推薦閱讀
https://embed-linux-tutorial.readthedocs.io/zh_CN/latest/linux_app/arm_gcc_hello_world.html?embed-linux-tutorial.readthedocs.io4. ARM-GCC和開發板的HelloWorld - [野火]i.MX Linux開發實戰指南 文檔4. ARM-GCC和開發板的HelloWorld - [野火]i.MX Linux開發實戰指南 文檔?embed-linux-tutorial.readthedocs.io一個非常完整且詳細的交叉編譯指南,雖然不支持 MacOS,但是我們可以通過開一個 Linux 的 docker 來解決問題。
Documentation?crosstool-ng.github.ioCrosstool-ng 是目前原生在 MacOS 下確認可支持的交叉編譯方案,但是需要你去在硬盤上開空間操作復雜。有把主系統搞崩的風險。
Docker-nano/crosstool-NG?github.com如果你鐵了心要用 crosstool-ng,個人推薦可以看看這個別人寫好的 Dockfile。但還是回到了原來的問題,如果你都起了 docker 了。ubuntu 或者其他 Linux 的鏡像不香嘛。
總結
以上是生活随笔為你收集整理的apache arm 交叉编译_MacOS 下交叉编译的折腾笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: “池南又多风”上一句是什么
- 下一篇: elasticsearch 条件去重_e
