GCCはC ++自体で記述されているため、鶏と卵の問題はありませんか?


10

4.8リリース以降、C ++コンパイラGCC(そのG ++部分)は、CではなくC ++自体で記述されています。これについて架空の質問があります。

まだC ++コンパイラがない新しいプラットフォームでGCCのC ++コードをコンパイルする方法を知りたいです。もちろん、他のマシンでコンパイルされたビルド済みのバイナリを使用することもできます。または、Cで書かれた古いバージョンのGCCを使用して、現在のバージョンをコンパイルすることもできます。

しかし、ビルド済みのバイナリがなく、最新バージョンがないと、行き詰まっていましたよね?そうでない場合、GCCプロジェクトのCからC ++への切り替えによって引き起こされるこの状況に他の影響がありますか?


3
あなたがここで何を求めているのかはわかりませんが、クロスコンパイルについて読むことをお勧めします。

5
まったく新しいプラットフォームには、C ++コンパイラもCコンパイラもありません。クロスコンパイルが答えです。
文書

1
おそらく、読むべきC ++へのGCCの動きをC ++への移行と、おそらく議論のGCCは現在、ビルドにC ++が必要になりますのredditに。gcc4.8より前のバージョンが、任意のオペレーティングシステムにパッケージされたCコンパイラでビルドできるかどうかはわかりません(そのため、多くの場合、C89に制限されます)。

2
この質問に対してC ++の何が特別なのかわかりません。問題はCまたは他の言語に存在しますね。
RemcoGerlich 14

回答:


16

これは実際には、ブートストラップと呼ばれるよく知られた概念です。基本的に、どこかに、現在のGCCコードベースを構築できるバージョンのGCCを構築するための最小限のCコードベースが存在します。セルフホスティング言語は何十年もそのようなことをしてきました。


実は違う。それはもう当てはまりません(そして質問の問題)。 gccac onlyコンパイラではビルドできなくなりました。彼らが作るgccコンパイルでの唯一の保証は、gccバージョンNがgccバージョンN-1でビルドできることです。

9
@MichaelT:しかし、GCCの以前のバージョンができ、その後、私が言ったことであるC ++で記述されたそれ以降のバージョンをコンパイルすることができますCコンパイラで構築すること。
メイソンウィーラー

私はまた、質問内の質問をHowever, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?指摘します。-それ、以前のバージョンにアクセスできないこと、およびコードベースのCからC ++への切り替えの他の影響に対処しないことを前提としています。

9

コンパイルする言語と同じ言語で書かれたコンパイラを作成することを、ブートストラップと呼びます。ウィキペディアの記事では、コンパイラーをブートストラップできるいくつかの方法について説明しています。

4.8以降のG ++ソースコードのみがあり、ターゲットプラットフォーム用のビルド済みのバイナリがない(既存のC ++コンパイラはない)という制限がある場合、G ++コンパイラのブートストラップはクロスコンパイルによって実行できます。

クロスコンパイルを使用してコンパイラをブートストラップするとき、コンパイラのいくつかのバージョンをビルドします

  1. PCにC ++コンパイラをインストールします(任意のC ++コンパイラを使用できますが、G ++である必要はありません)。
  2. そのコンパイラーを使用して、PCで実行できるG ++クロスコンパイラーを作成し、ターゲットプラットフォーム用のコードを生成します。
  3. 先ほど作成したG ++クロスコンパイラーを使用して、ターゲットプラットフォームで実行できるネイティブG ++コンパイラーを作成し、そのコードを作成します。
  4. 完了です。新しいプラットフォーム用のC ++コンパイラを作成しました。

最初のステップを実行するPC(または同様のもの)もない場合、実際には行き詰まっていますが、そのような状況に陥ってコンパイラーをブートストラップしようとする可能性はごくわずかです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.