マーシャラー
このMaxima on Androidというアプリの中にはnativeコードで書かれたプログラムが3つ含まれています。
MaximaについてはAndroid NDKをスタンドアローンで使うクロス環境をarm向けに構築したため、それを手直しすることで、位置独立形式に対応したり、x86版を作ることができました。
問題はGnuplotとQepcadです。arm版を作成する際には、この2つはScratchbox2という一種の仮想環境とarm用クロスコンパイラを組み合わせて、コンパイルして動かすことができました。ではx86版を作るにはどうしたらいいか、、、。
結構悩んだ末にあっけない解決策がありました。色々と調べていると、Android x86と普通のPC Linuxは静的リンクしたプログラムについてはバイナリコンパチである、ということが分かって来たのです。へ?バイナリコンパチ?それならと、32bitのDebianで、
#include <stdio.h>
main() {
printf("hello world\n");
}
をtest.cに格納して、gcc -static test.cとして作ったa.outをAndroid x86エミュレータにadbで入れて、adb shellで入って起動すると、、、動くんです。ビックリです。
32bitのDebianでQepcadとGnuplotを静的リンクで作って、そのままエミュレータ上のMaxima on Androidに配置してみると、、、Qepmaxもplot2dも動いてしまったのでした。