日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

apache arm 交叉编译_MacOS 下交叉编译的折腾笔记

發布時間:2023/12/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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└── usr

hello_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.io

Crosstool-ng 是目前原生在 MacOS 下確認可支持的交叉編譯方案,但是需要你去在硬盤上開空間操作復雜。有把主系統搞崩的風險。

Docker-nano/crosstool-NG?github.com

如果你鐵了心要用 crosstool-ng,個人推薦可以看看這個別人寫好的 Dockfile。但還是回到了原來的問題,如果你都起了 docker 了。ubuntu 或者其他 Linux 的鏡像不香嘛。

總結

以上是生活随笔為你收集整理的apache arm 交叉编译_MacOS 下交叉编译的折腾笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。