2011-10-23 8 views
7

質問は比較的単純です:コンパイラのホストと同じアーキテクチャ上の2.4 ABIを対象とする4.xシリーズのGCC(binutilsとfriendsと一緒に)をビルドするにはどうすればいいですか?最新の(4.x)GCCをビルドして、ホストと同じアーキテクチャ上の2.4.xカーネルをターゲットにしますか?

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

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

いずれのポインタも大歓迎です。私はどちらかといえばcrosstool-ngに精通していますが、それはもはや2.4カーネルをサポートしていないようです(明白な理由のため)。

+2

は、彼が最も近代的なディストリビューションで使用されるものよりも低いABIを対象とし、取得する方法を見つけ出すために探していますこれに対応して、ELFバイナリの.ABIタグセクションがより低くなる。私はどこでもウェブ上でこれに関する情報を見つけることができないので、私はこれがかなり特殊な要求であると推測しています。おそらくあなたは[email protected]メーリングリストに電子メールを送りたいと思うかもしれません。 –

+0

@Ken Bloom:ありがとう。良いアイデア。確かに私は自分でポインタを見つけることができませんでしたので、私はここで尋ねると思った:) – 0xC0000022L

答えて

1

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

RHEL 2.1または3は、最近までサポートされていたので最適かもしれません。あなたにも数学ライブラリが必要になりますので、

コンパイルはgcc 4は、トリッキーなことがあります。多段階のアプローチが必要な場合があります。

EDIT:新しいGCCをコンパイルするための

  1. コンパイル最新のメイク - PATH
  2. 開梱のgccの
  3. 開梱のMPFR、GMP、gccのディレクトリ
  4. シンボリックリンクへのMPCに追加ベースディレクトリ(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" 
+0

残念ながら、これは唯一残っているオプションのようです。 – 0xC0000022L

0

私はあなたがおそらくその場合のGCCクロスコンパイラを構築すべきであること、そしてあなたが古い2.4カーネルに依存関係を扱うことになるのglibcをコンパイルする必要があることを信じています。

しかし、単にあなたのコードをコンパイルしようとしなかった、と単純に古い2.4カーネル互換glibcライブラリとリンク?私はそれがうまくいくと思います。

そして、あなたは古いシステム上で(最近のGCCを使用して、最近のシステム上で簡単な方法を得た)あなたのバイナリを実行しようとしたのですか?期待どおりに動かないのは何ですか?

よろしくお願いいたします。

+0

ビルドされたバイナリは、起動時にカーネルが古すぎるというエラーを投げます。あるいは、ローダーがそうするでしょう。 – 0xC0000022L

関連する問題