コンパイラとその仕組みについて少し調べたところ、プロセスは多くの場合、プリプロセッサ、コンパイラ、アセンブラ、リンカーの 4 つのステップに分かれていることがわかりました。私がこれらのステップを思い描いた方法は、それぞれが独自の個別のプログラムであることでした。プリプロセッサプログラム、コンパイラプログラム、アセンブラプログラム、リンカプログラム。ただし、アセンブリ コードの作成とオブジェクト ファイルの生成のプロセスがすべてコンパイラ プログラムによって処理される場合と、そうでない場合があることがわかります。使用するコンテキストとプログラミング言語に大きく依存するようです。私の質問は、C++ ソース コードをマシン コードに変換するために、一般的な変換プロセスをどのように分割するかということです。
- プリプロセッサはコンパイラとは別のプログラムですか? それとも、そのプロセスは通常、コンパイラ プログラムの一部ですか?
- コンパイラは通常、何を担当しますか? アセンブリ コードを生成してからマシン コードに変換しますか?
- リンカーは、コンパイラの終了後に実行される独自の別のプログラムですか?
補足: 私の質問は他の C++ コンパイラ スレッドとは異なります。なぜなら、コンパイラがどのように機能するかだけでなく、リンクなどの他の特定のプロセスに独自の実行可能プログラムがあるかどうか、またはそれらが通常コンパイラ プログラムに組み込まれているかどうかを尋ねているからです。