クロスコンパイルだとconfigureでエラーになる件
ちょっと気になることがあったのでoprofileでもかけようと思ってoprofileをクロスコンパイルしようとしたら、libpoptが無いって言われたのでpoptをクロスコンパイルしようとしていつものようにはまってしまった...orz
configureしようとすると
checking for va_copy() function... configure: error: cannot run test program while cross compiling
See `config.log' for more details.
とかぬかしやがる。
日本語でおk。
configure.acを見てみると「AC_CHECK_VA_COPY」って行が書いてある。でもどう考えてもクロスコンパイルで「cannot run test program」って当たり前すぎる気がする。
仕方がないのでconfigureも見てみたけど、--hostと--buildが異なる指定ならクロスコンパイルモード?になって、プログラムを実行してチェックする処理(AC_CHECK_FUNCSを確認するあたり)がちゃんとスキップされているような気がする。
さらに調査ってことで、va_copyでconfigureをgrepしてたらこんな処理が見つかった。
if test ".$ac_cv_va_copy" = .; then # ac_cv_va_copy 未設定で if test "$cross_compiling" = yes; then # クロスコンパイルなら { { # エラー吐いて echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2; } { (exit 1); # 終了!?��( ̄□ ̄;) exit 1; }; } else ... # va_copy() を呼び出すプログラムをコンパイル&実行するコード
っておいおい...
クロスコンパイルなら問答無用でエラーですよ?
なんでじゃー!ヽ(`Д´)ノ
何とかして回避する方法はないかと探してみたけど、見つからず。と、そういえば昔buildrootを使っていろんなパッケージをクロスコンパイルしてた時にも似たようなことがあったような気がしてきて、過去ログを探してみたら案の定opensshのコンパイルログにそれらしきものを発見。
どうやらac_cv_xxx=yesとかnoとか指定しながらconfigureすれば上書き動作できるっぽい。
$> export PATH=$PATH:/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin $> ac_cv_va_copy=yes ./configure --prefix=/xxx/rootfs --build=i386-pc-linux-gnu --host=x86_64-unknown-linux-gnu
これで無事configureは終了。後はmakeが通れば(ぇ
しかし、これクロスコンパイルのたびにac_cv_xxxを1つずつつぶさなきゃだめなのかなぁ。
どっかに一覧的な情報があれば楽なんだけど。