GCCのld
を大幅に性能改善したLDDが、近くLLVM 4 rc1に組み込まれ、デフォルトで使用されるようになる。この新しいリンカは、稼働中のFreeBSD/amd64ベースのシステムではすでに使用されているが、LLVMでの利用はまだ試験段階であり、問題が発生すればrc2では保留される可能性もある。
LLDを導入することのメリットとその成熟度は、先日リリースされたFreeBSDプロジェクトの四半期ステータスレポートに最もよく示されている。
LLDの開発者たちは、この四半期で大きな進歩を達成しました。LLDとFreeBSD双方にコミットされた変更により、私たちは大きなマイルストンに到達しました – LLDを使用して、FreeBSD/amd64ベースのシステム全体(カーネルとユーザ領域)のリンクが可能になったのです。
さらにBSDプロジェクトが寄贈した多数のパッチにより、BSDポートの約95%、パッケージ数にして25,000以上が、LLDを使ってリンク可能になった。
LLDの開発は2015年5月、ELF(Unix)およびCOFF(WIndows)システムリンカのパフォーマンス向上を目的として開始された。開発者たちによると、LLDは、ld
よりも高速なリンカとしてGoogleが開発したGNU gold
リンカに比較しても、全体で1.2~2倍高速だという。実際にLDDは、特に大規模なコードベースにおいて、ld
やgold
よりもはるかに高速だ。一方で、小さなプログラムや、あるいは共有ライブラリを多用するプログラムにおいては、メリットはあまり期待できない。gold
と同じく、LLDは、異なるバイナリファイルフォーマットを抽象化するBFDを使用しない。
注目に値するのは、約165,000行のgold
に比較してLDDが、COFFリンカで7,000行、ELFリンカで18,000行と、非常にコンパクトであることだ。さらに、プログラムの中に静的ライブラリとして組み込んで、lld::elf::link
エントリポイントをコールすることもできる。
LLVM 4公開前にLLDを体験したいのであれば、ソースからビルドすることが可能だ。
$svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
$cd llvm/tools
$svn co http://llvm.org/svn/llvm-project/lld/trunk lld
$cd ../../..
$mkdir build
$cd build
$cmake -G “Ninja” -DCMAKE_BUILD_TYPE=”Release” -DCMAKE_INSTALL_PREFIX=”your_preferred_location” ../llvm
$ninja lld
$ninja install
LDDのコンパイルが完了すれば、それを使用する最も確実な方法は、ld
をld.lld
にシンボリックリンクすることだ。この方法ならばGCCでも動作する。あるいはLLVM -fuse-ld=lld
オプションを使用すれば、シンボリックリンクの必要はない。
この記事を評価
- 編集者評
- 編集長アクション