これはややGentooに固有のものなので、コンテキストに合わせて説明し、一般的なLinuxシステムに抽象化してみましょう。
私のコンピュータがAthlon64だったとき、最初は誤ってCHOSTを「i686-pc-linux-gnu」に設定しました。 「x86_64-pc-linux-gnu」に変更したいです。 これに関するガイドがあります。 これはうまくいきません。
最初のステップは、「binutilsを再コンパイルしてからgccを再コンパイルする」ことです。
問題の説明は次のとおりです。
- gccを使用したbinutilsのコンパイル - 新しいas、arなどのファイルが正常に作成されました。
- これ残りGCC。 gccは現在新しい/usr/bin/asを使用しようとしますが、動作しません。
- gccは何もコンパイルできないため、gccをコンパイルできません。 arなどに戻り、CHOSTの変更を元に戻してbinutilsを再コンパイルする必要があります。
だから、次のことを試しました。
- arなどでバックアップ
- binutilsコンパイルとgccの動作不能レンダリング
- 私がバックアップした以前のバージョンにar、asなどを接続します。
- gccをコンパイルしてみてください
次の理由でgccのコンパイルが失敗します。
/usr/x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/x86_64-pc-linux-gnu/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
これglibcのバグ(完成チェーン)です。
だからそれは見える:
- gccのコンパイルはglibcの新しいバージョンに依存します。
- gccを実行するには、binutilsが以前のバージョンである必要があります。
私はステップいいえあまりにも複雑で最初にアドバイスを求めたいので、これを試しました。
- 新しいアーキテクチャでbinutilをコンパイルします。
- as、arなどを古い実行可能ファイルに再接続する
- old-gccとold-binutilsを使用した新しいglibcのコンパイル
- new-gccをold-gccとold-binutilsでコンパイルしますが、new-glibcを使用してください。
- as、arsなどをnew-binutilsに再接続する
- ボスのようにすべてを再コンパイル
上記の#4は機能できますか?完全に再インストールせずにこれを実行できますか?
答え1
私が知る限り、これは不可能です。ツールチェーンは真空状態ではなく、互いに接続されていることを覚えておいてください。
役に立つのは、クロスコンパイラが新しいインフラストラクチャを構築することですが、私はそれが本当に疑わしいです。 glibcアップデートの「原子性」はすべてを台無しにします。
システムをバックアップして再インストールすることをお勧めします。
答え2
amd64 stage3 tarballをダウンロードしてgccのコピーを試しましたか?
答え3
カーネルが64ビットの場合(64ビットバイナリを実行できます)、一般的な指示に従ってchrootから新しいx86_64 Gentooのインストールを開始できます。以前は同様のことをしたことがあります。効果的に再インストールしましたが、まだ古いシステムを実行しています。マウントする空きブロックデバイスがない場合は、init=chroot\040/new\040/bin/sinit
サブディレクトリを使用して起動するか、最小環境にドロップダウンしてディレクトリを混在させることができます。
カーネルが32ビットの場合は、64ビットカーネルを探すか、64ビットクロスコンパイラをビルドして64ビットカーネルをビルドして起動し、上記を参照してください。