MAC で hello.c をARMバイナリにクロスコンパイルする


(1) Ubuntuの環境をつくる
MAC で Ubuntu を動かす (VirtualBox)

以降、Ubuntu環境です
(2) ARMの開発環境をインストールする

$ sudo apt-get install g++-arm-linux-gnueabihf

(3) hello.c をクロスコンパイルする
hello.c

#include <stdio.h>
int main(int argc, char *args[])
{
    printf("Hello, world!\n");
}

クロスコンパイルする

$ arm-linux-gnueabihf-gcc hello.c -o hello

実行すると、実行できないよというメッセージが出る

$ ./hello
bash: ./hello: cannot excute binary file:

(4) ARMの実行環境をインストールする

$ sudo apt-get install qemu-user qemu-user-static

環境設定する

$ update-binfmts --display qemu-arm
$ cd /lib/
$ sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 .
$ sudo ln -s /usr/arm-linux-gnueabihf/lib arm-linux-gnueabihf

実行すると、今度はOK

$ ./hello
Hello, world

(5) ラズパイで実行する
ラズパイに転送して、実行します。OKでした。

参考
Ubuntu 12.04 で hello.c をARMバイナリとしてコンパイルして実行してみる

debian – binfmt-support
binfmt_misc というカーネルモジュールは、システム管理者がファイル拡張子をベースにして各種バイナリ 形式をインタプリタに登録し、該当するファイルが実行された時には適切な インタプリタが呼び出されるようにできます。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です