これはやや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アップデートの「原子性」はすべてを台無しにします。
システムをバックアップして再インストールすることをお勧めします。