前の記事で、cygwin(+Arduino環境用GCC)でビルドしたuser1.binは実行できず、Linuxでビルドしたuser1.binは動いた、という結果に終わった。
それだけでは、考察が甘いだろう。
何がダメだったのかの理由まで調べておきたい。
ただ、本職じゃないので、ありがちなところだけチェックしておこう。
まずは、GCCのバージョンから見ていく。
- Linux
gcc version 4.8.2 (crosstool-NG 1.20.0) - cygwin+Arduino (xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2)
gcc version 4.8.2 (GCC) - esp8266-gcc5.2.0-r5.exe
gcc version 5.2.0 (GCC)
うーん、「まずは」と書いているが、実はここに期待していたのだ。
何かしらバージョンが違うことによって、どこかバイナリに食い違いが出たんじゃなかろうか、と。
当てが外れた。
ひとまず、5.2.0を評価するのはやめよう。
cygwinでビルドしたときのbinと、Linuxでビルドしたときのbinは、バイナリのくせにあまり違いがない。
なんとなくだが、数字の違いを見ていると、アラインメントに関係するような気がした。
04とか、10とか、そういう数字に違いが多いからだ。
違うかなぁ。
地道に生成しているファイルを比較したところ、オブジェクトファイルの段階で差があった。
readelfすると、Linuxではアラインメントが1なのに、cygwinでは4であつかっているところがある。
全部ではないのだが、ところどころ見られる。
やはりコンパイラをArduinoから間借りするというのがよくなかったか。
じゃあ、ちゃんとインストールした5.2.0だったらうまくいくかと思ったが、コンパイル中にあれこれ関数定義がないと言われる(ets_memcpyとか)。
インクルードが足りないのかと思ったが、インストールした5.2.0の中にもSDKがまるまる入っているなど、なんかいろいろ考えるところが発生しそうだ(そっちの環境も、それはそれでmake関係のエラーが出たり)。
うん、もう、めんどくさいからWindowsでビルドするのはあきらめよう。
ここでがんばる時間がもったいない。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。