コンテンツにスキップ

mold - 最新高性能リンカー チートシート

mold - 最新高性能リンカー チートシート

mold (Modern Linker) は GNU ldgold、LLVM lld のドロップイン置換で、すべての CPU コアを使用するため最初から設計されています。リンクはしばしば、そうでなければ並列ビルドの連続化テール — 200 ファイルを 16 コア間で構築、次に 1 つのコアでリンクを待つ。mold はそのステップを並列化し、頻繁にリンク時間を 1 桁削減します。これは編集・コンパイル・実行ループで、大規模 C、C++、Rust コードベースで最も目立ちます。

インストール

プラットフォームコマンド
Debian/Ubuntusudo apt install mold
Fedorasudo dnf install mold
Arch Linuxsudo pacman -S mold
macOS (Homebrew)brew install mold
ソースからrui314/mold リポジトリからビルド
確認mold --version

mold を使用 (3 つの方法)

方法方法
ラッパーmold -run cargo build / mold -run make
コンパイラフラグ-fuse-ld=mold (GCC 12+/Clang)
シンボリックリンクld を mold にポイント (システム全体)
# 最簡単: ビルドコマンドをラップ
mold -run make -j$(nproc)
mold -run cargo build --release

Rust 構成

# ~/.cargo/config.toml またはプロジェクト .cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
手法注釈
link-arg=-fuse-ld=mold標準的、clang または GCC 12+ が必要
mold -run cargo build設定変更不要
ターゲット別セクション他のプラットフォームへの影響を維持

C/C++ 構成

# 直接コンパイラフラグ
gcc -fuse-ld=mold main.c -o main
clang++ -fuse-ld=mold app.cpp -o app

# CMake
cmake -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" ..

# Makefile
LDFLAGS += -fuse-ld=mold

mold が使用されたことを確認

# バイナリのコメントセクションに記録されたリンカーを確認
readelf -p .comment ./my-binary | grep -i mold

# または mold の統計で実行
mold -run cargo build 2>&1 | tail

有用なオプション

オプション効果
--threads=Nワーカースレッドを制限
-run CMDビルドコマンドをラップ
--perfパフォーマンス分解を出力
--statsリンク統計を放出
--gc-sections未使用セクションを削除
--icf=all同一コードフォールディング (小さいバイナリ)
# リンク時間がどこに費やされるかを確認
mold --perf -run cargo build --release

mold が最も役立つとき

状況メリット
多くのオブジェクトの大規模バイナリ最大絶対的セーブ
頻繁なインクリメンタル再構築最大の生活の質のゲイン
デバッグ構築 (大規模シンボルテーブル)非常に目立つ
利用可能な多くの CPU コアコアでスケール
小さいプロジェクト限界的 — リンクはすでに高速

ライセンスとプラットフォーム注記

注釈詳細
ライセンスMIT (最新バージョン)
Linux完全にサポート、プライマリターゲット
macOSサポート; Apple 独自のリンカーも改善
Windowsプライマリターゲットではない

mold 対 他のリンカー

リンカー相対速度注釈
GNU ldベースライン (最速)多くのシステムでデフォルト
goldld より高速大きく取って代わられた
lld (LLVM)より速い良いデフォルト、十分にサポート
mold最速大規模並列リンクに最適

sccache と組み合わせてフルウィンを得ます: sccache は再コンパイルを回避、mold は残るリンク速度を上げます。

リソース