Intel Edisonのバイナリ互換性を調べる


課題

 EdisonはCPUが遅いしRAMも小さいし,内蔵ROMの書き換え限界回数もよく分からないので,いつもの開発PCで作成したバイナリがそのまま使えると嬉しい!
 でも,気づいたら自分の周りのPCは,64bit化してた!

検証

 まずは,64bitの開発PC(Ubuntu 14.04 LTS)に32bit環境を整えます.

$ sudo apt-get install lib32z1-dev gcc-multilib g++-multilib

あとは適当に何かプログラムを.

hello_c.c
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Hello world!\r\n");
    return 0;
}
hello_cpp.cpp
#include <iostream>

int main(int argc, char *argv[])
{
    std::cout << "Hello world!" << std::endl;
    return 0;
}
Makefile
CC = gcc
CXX = g++
CFLAGS =-m32 -O4

.PHONY: all clean hello_c hello_cpp 

all: hello_c hello_cpp 

clean:
    rm -f ./*.o
    rm -f hello_c hello_cpp 

hello_c: hello_c.o
    $(CC) $(CFLAGS) -o $@ $^

hello_cpp: hello_cpp.cpp
    $(CXX) $(CFLAGS) -c $^
    $(CXX) $(CFLAGS) -o $@ hello_cpp.o

%.o: %.c
    $(CC) $(CFLAGS) -Wall -g -c $<

CFLAGSに -m32 をわたしているところがミソです.

 他にも手持ちのプログラムをいくつか試してみたんですが,他のライブラリをリンクしないものに関しては,全然問題なかったです.当たり前か.
 本当はSSL使うプログラムをビルドしたかったんですが,sslのライブラリをi386指定でインストールしようとしたら,build-essentialとコンフリクトしてるらしくて,なんか厄介なことになりそうだったんで,それ以上は追い込まないことに.

 と,ここまで調べたんだけど,これも例によって数時間差でCannonball WikiさんがMRAAまで含めたバイナリの互換性について調査してくださっていたので,この記事は二番煎じです,ハイ.

 そういえば,Breakoutボードに直接ハンダ付けするという手抜きをしてたら,ついにランドがはがれてしまったので,ちょっと何とかしなければならないと思い,千石でこんなのを買って来ました.

スルーホールに挿せばOKなようです.Amazonからも買えるみたい.