重複の可能性:
gcc/g++ はどのようにブートストラップされますか?
gcc が C で書かれていることは誰もが知っているので、gcc がどのようにコンパイルされているか知りたいです。
彼らは gcc を思いつくために他のコンパイラを使用しましたか?
その場合、同じコンパイルを使用して C プログラムをコンパイルできますか?
重複の可能性:
gcc/g++ はどのようにブートストラップされますか?
gcc が C で書かれていることは誰もが知っているので、gcc がどのようにコンパイルされているか知りたいです。
彼らは gcc を思いつくために他のコンパイラを使用しましたか?
その場合、同じコンパイルを使用して C プログラムをコンパイルできますか?
ここには鶏と卵はありません。glibc は、使用しているコンパイラでコンパイルされます。
そのコンパイラは、同じコンパイラの以前のバージョンで最初にコンパイルされました。その後、それ自体もコンパイルできます。
本当のニワトリが先か卵が先かという問題は、1950 年代に誰かが世界初のコンパイラを書かなければならなかったときに解決されました。その後、あるコンパイラを使用して次のコンパイラをコンパイルできます。
新しいコンパイラを構築する基本的な方法は2つあります。
Cのような確立された言語用の新しいコンパイラを作成している場合は、別のベンダーの既存のコンパイラを使用して新しいコンパイラを構築してください。たとえば、HP-UXに付属のCコンパイラを使用してビルドできgcc
ます。
新しい言語用のコンパイラを作成する場合は、最初に非常に単純なコンパイラを別の言語で実装します(最初のCコンパイラはPDP-11アセンブラで作成されました)。この初期コンパイラは、ターゲット言語の小さなサブセットのみを認識します。基本的に、いくつかのファイルI/Oといくつかの簡単なステートメントを実行するのに十分です。ターゲット言語サブセットで新しいコンパイラーを作成し、最初のコンパイラーでビルドします。次に、ターゲット言語のより大きなサブセットを認識できる、もう少し機能の高いコンパイラーを作成し、2番目のコンパイラーでビルドします。完全なターゲット言語を認識できるコンパイラーができるまで、このプロセスを繰り返します。
彼らは他のコンパイラを使用しませんでした。glibc を使用しないようにコンパイラに指示するだけで、glibc を使用しない C プログラムを作成できます。だから、このようなもの:
gcc main.c -nostdlib