gcc-3.4.5クロス環境(補足)

以下、gcc やリンカ・共有ライブラリに関する一般的な話。 gccのマニュアルも参照のこと。ビルド環境と実行環境が違う場合に起こる問題です。

  • 実行時に「libgcc_s.so.*がない」と言われる
    • libgcc_soをインストールする (SL-C3000はデフォルトで持っていない)
    • コンパイル毎に "-static-libgcc" オプションを付ける
    • 上記オプションをデフォルトにするため、gccの設定ファイル(specs)をいじる(→参考)
  • 実行時に「lib*.soがない」と言われる
    • zaurus に lib*.soをインストールする
    • コンパイル時に "-static" オプションを付ける
    • 或いは、個々のlib*.aを静的リンクする(リンカが*.soより先に*.aを参照するようにする)
  • softfloatのライブラリとhardfloatのそれをリンクすることは出来ない
    • 従って、libqpe.soに依存するもの(Qtopia)は全てhardfloat
    • OpenZaurus はsoftfloat ([VFP][SoftFP]、さらにkernelが2.6 なので速い?)
  • glibc-2.2.*とglibc-2.3.*の間には、完全な互換性はない
  • gcc-2.95.3でビルドしたglibc-2.2.2と、gcc-3.4.5でビルドしたそれは互換性に問題がある?
    • 後者のlibc-2.2.2.soは "__register_frame_info"関数を含むが 前者には無い、など