あっちに行ったりこっちに行ったり――クロスコンパイル環境、三度挑戦

まだまだ悪戦苦闘が続いています(^^;;; いっそ、という勢いでdev_img1.3もザウルス本体に導入して試してみました。が、こちらも撃沈○| ̄|_ とはいえ、全く収穫が無いわけではなく。そこで、自分なりにやってみた失敗の道を備忘録的に書き連ねてみます。序も序の口なので、こんな所で詰まる人はいないとは思いますが、主に自分のために。



●共通

  1. CFLAGS(コンパイル時のオプション)、TARGET(どれ向けコンパイルか)、PATH周り(include,lib)、この3つを最低限クリアさせる必要がある。
  2. CFLAGSは、gccのバージョン、環境によって通らないオプションがある。-pipeや-mtune=xscale等が曲者かもしれない
  3. TARGETはもちろんarm/Linux。ちゃんとarm-linux-gcc/g++が使われるように確認する。
  4. 上記環境向けのinclude、libにもパスを通す
  5. 知識不足なので、IPPやWMMXiなどの、入手していないor使い勝手が分かっていない最適化用ライブラリ群のオプションははずしておく
  6. 既にプロジェクト、もしくはconfigure作者の想定外のエラーを起こしていると思われる場合は、対症療法で何とかしようとしない(※8/9追加)

Cygwin

  1. myconf実行後に生成されるMakefileの補助ファイルconfig.makは、そのままのgccなため、HOST_CC=arm-linux-gcc
  2. ―mtune、―mcpuのオプションを認識せず。削除。
  3. EXTRA_INCLUDE,EXTRA_LIBSの項目を空白に。
  4. int_fast8_t等のtypedefが二重定義というエラーが出るため、config.hの当該部分であるtypedefをすべてコメントアウト
  5. codecs.conf.hの生成で引っかかるため、ヘッダが生成されない。一度x86で途中までビルドさせて、ヘッダだけ生成させ、Makefile内でこのヘッダを消させないように変更

で、現状はbitstream.c→bitstream.oの生成時に、何故かno such instructionとsuffix or operands invalid for 'mov'で止まっています。コンパイル自身は通ってるのに、何故アセンブラ側に怒られるのかさえ分かっていません。ニーモニック自体はarm向けのようなのは分かりますが。はて・・・?

・・・・何かここまでやってて、コンパイル「だけ」必死に通すことに、一抹の無意味さを感じなくもありません。これ、通っても本当に動くのかな、と。

Zaurusセルフ環境(dev_img1.3)

  1. myconf実行時、コンパイラのバージョンチェックで撥ねられる。2.95.1は実は駄目らしい。が、判定をごまかして通す。
  2. inttypes.h/bitypes.hがないと怒られる。パスは通っているのに。これもごまかす。

という無茶をやって、こちらではmpegvideo.c→mpegvideo.oの生成時にアセンブラ内部エラー(unrecognizable insn)で停止します。悪さをしてるのは主にコンパイラチェックをはずした自分なので、そこに原因があるのは想像がつくのですが、他のバージョンだと問題なく通るのでしょうか?


ビルドを通す事が目的でも無いのに、いつの間にか自己目的化していることに気がついて、今後どうしようか悩み中です(^^;;; 現在、代替のセルフ開発環境としてZGCCを入れようか迷っているところですが、そこまでする必要があるのかどうか、ちょっと自身に問うた方が良いかもしれません。趣味はあくまで楽しめる範疇で、ですね。