ジャンル不定の日記です。

Buildrootでクロスコンパイル

x86のArch Linux上でOrange pi用のアプリをコンパイルするのにarm-none-eabi-gcc使おうとしてたんだが、
arm-none-eabi-gccはstdio.hとかiostreamとかが無くてコンパイルできずかなり時間を費やしたが、結局別のクロスコンパイラを使う方法を発見した。
Buildrootのクロスコンパイラを使えばいいのね。

Buildrootってarm-none-eabi-gccを使ってシステムを作るものだと思ってたんだが、クロスコンパイラから作るのね。
いつもBuildrootのビルドするとき
$ make ARCH=arm CROSS_COMPILE=arm-none-eabi-
こんな感じでやってたが、これ、
$ make
だけでよかったのね。
Buildrootというものを勘違いしてた。

で、buildroot/output/host/bin/ 以下に arm-linux-gccとか arm-buildroot-linux-uclibcgnueabihf-gccがあるが、これがクロスコンパイラ。(どっちでも実体は同じらしい)
で、
$ PATH=$PATH:buildroot/output/host/bin
みたいな感じでPATHに追加して、
$ arm-linux-gcc -o hello hello.c
でコンパイルできた。
Orange Pi R1に転送して実行できた。
ターゲットのシステムに最適なコンパイラだから、Arch Linux標準のコンパイラ使うよりもいいね。

Buildrootのビルドの際に対応させればできるみたいだが、
cppのコンパイルは標準ではできない。
自前アプリはC++で作ろうかと思ってたが余計なもん入れずに済むしC言語の方がいいね。