Maxima で綴る数学の旅

紙と鉛筆の代わりに、数式処理システムMaxima / Macsyma を使って、数学を楽しみましょう

-Android- ECL を 再コンパイル

f:id:jurupapa:20140323210638j:plain

 

しばらく前に書いた、-Android- Maxima on AndroidはAndroid Lで動かない!?という記事の中で、MoAに内蔵しているmaximaコマンドがエラーを吐いて起動しない、というお話をしました。

 

ようやく時間が取れたので、デバッグ開始です。色々と調べてみると、

  • gccコンパイルする際に-fPIEオプションを付けること、
  • ldでリンクする際に-pieオプションを付けること、

が大事であることが分かりました。実際に簡単なcのプログラム(hello.c)を以下のようにコンパイルすると

arm-linux-androideabi-gcc -fPIE -pie hello.c

確かに位置独立形式になりました。コンパイル後のa.outをAndroid Lのエミュレータに入れて実行すると、、、確かに実行出来ます。

 

さあ、とすれば後はecl-androidのビルドシステムを全て調べ、全てのMakefileコンパイルとリンクの部分に上記のオプションを追加してやればまずは位置独立形式のeclをビルド出来るはずです、、、。

 

ところが結構作業量が多く、かつ作業に漏れがあった場合に中途半端な位置独立形式になるわけで、それで良いのか、、、心配事はつきません。なにかもう少し確実に上記を達成する方法は無いものでしょうか。

 

で、考えて、、、思いつきましたよ。ecl-androidはそのままにして、使用するAndroid NDKの中のコンパイラとリンカを変更して、必ず上記のオプションを使用するようにすれば良い!!しかもそのためにAndroid NDKをそのようにビルドし直す、、、などというこれまた大変な作業をする必要もありません。コンパイラとリンカだけシェルスクリプトでラップして、引数に上記オプションを追加して、本体を呼び出せばOKのはず。

 

この作業をやって、全体のビルドを開始し、今日はお出かけ。返って来て出来上がったeclをテストすると、無事にAndroid Lエミュレータで実行することができました。