0

このエコシステム全体がどのように機能するかを理解するために、LLVM で小さなコンパイラを構築しようとしています。オブジェクトファイルの生成まではできました。さて、リンク部分について少し混乱しています。私の理解では、clang はシステムに存在するデフォルトのリンカーを見つけ (特に指定されていない限り)、 o​​r 呼び出しを使用してリンクを行いsystemますfork_exec。これは、ユーザーがコマンド ラインから手動でリンカーを実行する場合とほとんど同じです。

しかし、llvm ツールチェーン内にlldというプロジェクトがあることも知っています。これは別のリンカですが、より高速で、さまざまな種類のオブジェクト ファイル (COFF、ELF など) をリンクできます。それで、なぜclangがlld自体を使用しないのか考えています。つまり、オブジェクト ファイルやその他のフラグを引数として関数を呼び出し、最終的なバイナリを戻り値の型 (または参照パラメーター) として取得するソース コード内のライブラリとして使用しないでください。システムリンカーに依存せずに(おそらくフォールバックとして)独自のバージョンのlldを出荷できます。コードの再利用以外に、これがプログラムで行われない理由はありますか?

いくつかの質問:

  • システム内のすべてのリンカーはクロスリンクをサポートしていますか (つまり、Windows でリンカーを使用して Linux バイナリを生成できますか)?
  • 通常同梱されているものをハードコーディングする以外に、プログラム内のシステム リンカを見つけるコマンドまたはその他の方法はありますか?

システムと言うときは、オペレーティング システムを意味します。

4

0 に答える 0