7

質問は比較的簡単です。コンパイラのホストと同じアーキテクチャで 2.4 ABI をターゲットとする 4.x シリーズの GCC を (binutils やその仲間と共に) 構築するにはどうすればよいでしょうか?

ホスト システムは x86 または x86_64 で、唯一の要件は、ABI が一致する限り、ビルドされた ELF ファイルが古いカーネルで実行されることです。(カーネルソース/ヘッダーが存在します)

リンクするには、互換性のある libc も必要です。ただし、(g)libc のバージョンを知っているので、動的にリンクすることもできます。

どんなポインタでも大歓迎です。私はcrosstool-ngにある程度精通していますが、2.4 カーネルをサポートしていないようです (明らかな理由により)。

4

2 に答える 2

1

おそらく最も簡単な方法は、古い OS に最新のツール チェーンをセットアップすることです。

最近までサポートされていた RHEL 2.1 または 3 が最適かもしれません。

数学ライブラリも必要になるため、gcc 4 のコンパイルは難しい場合があります。多段階のアプローチを行う必要がある場合があります。

編集:

新しい gcc をコンパイルする場合:

  1. 最新の make をコンパイル - PATH に追加
  2. gccを解凍する
  3. mpfr、gmp、mpc を gcc ディレクトリに解凍します。
  4. バージョン管理されたディレクトリをベース (mpfr、gmp、mpc) にシンボリック リンクします。
  5. gcc をビルドしてインストールする

このようなもの:

cd ~/software
tar xjf $DOWNLOAD/gcc/gcc-core-${GCCVER}.tar.bz2 || failure "unpack gcc failed"
tar xjf $DOWNLOAD/gcc/gcc-g++-${GCCVER}.tar.bz2 || failure "unpack g++ failed"

cd gcc-${GCCVER}

tar xjf $DOWNLOAD/gmp-5.0.2.tar.bz2 || failure "unpack gmp failed"
#tar xjf $DOWNLOAD/gmp-4.3.2.tar.bz2 || failure "unpack gmp failed"
ln -s gmp-* gmp
tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed"
#tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed"
ln -s mpfr-* mpfr
tar xzf $DOWNLOAD/mpc-0.9.tar.gz || failure "unpack mpc failed"
ln -s mpc-* mpc

cd ..
mkdir gcc-build
cd gcc-build
../gcc-${GCCVER}/configure --prefix=/opt/tools || failure "configure failed"
make || failure "make failed"
make install || failure "install failed"
于 2011-10-25T19:53:34.217 に答える
0

その場合、おそらく GCC クロスコンパイラを構築する必要があり、古い 2.4 カーネルへの依存を処理する GLibc をコンパイルする必要があると思います。

しかし、単にコードをコンパイルして、古い 2.4 カーネル互換の Glibc ライブラリにリンクしようとしただけですか? 私はそれがうまくいくはずだと思います。

また、古いシステムで (最近の GCC を使用して最近のシステムで簡単な方法で取得した) バイナリを実行しようとしましたか? 何が期待どおりに機能していませんか?

よろしく。

于 2011-10-24T22:20:17.967 に答える