リンカ
いろいろな機能があって、マニュアルページも長くて、ドキュメントが悪いことが多いため、訳がわからないパターンが多く、難しいプログラムです。ただ、リンカそのものの概念は簡単です。
Unixではコンパイラ(clangやgcc)はフロントエンドになっていて、実際にリンカのコマンドはこういうフロントエンド経由で起動されます。
例えばCコンパイラも本当はcc1というコマンドなんですが、cc1を直接起動することはなく、clangやgccのようなコマンドで起動することになっています。
拡張子を見れば何をやるべきかがわかるのと、.oファイル与えられていたらプログラミング言語ではなくオブジェクトファイルなので、リンカを起動する必要があるので、リンカを起動します。
つまり、どんなプログラムをコンパイルしてもリンカが常に起動します。たとえシングルファイルのプログラムをコンパイルするとしても、内部的には1つのファイルを1つの.oに変換し、改めてld、リンカコマンドをコンパイラドライバが裏で立ち上げて、リンクを実行することになっています。
コンパイラが実行ファイルを直接出力することは理論的には可能
しかし実行ファイルに含まれるコードを全てコンパイラに渡してコンパイルするのは時間の無駄