問題タブ [lld]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
32 参照

clang - リンカーがコンパイラでプログラム的に使用されないのはなぜですか?

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

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

いくつかの質問:

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

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