mold - 最新高性能リンカー チートシート
mold (Modern Linker) は GNU ld、gold、LLVM lld のドロップイン置換で、すべての CPU コアを使用するため最初から設計されています。リンクはしばしば、そうでなければ並列ビルドの連続化テール — 200 ファイルを 16 コア間で構築、次に 1 つのコアでリンクを待つ。mold はそのステップを並列化し、頻繁にリンク時間を 1 桁削減します。これは編集・コンパイル・実行ループで、大規模 C、C++、Rust コードベースで最も目立ちます。
インストール
| プラットフォーム | コマンド |
|---|
| Debian/Ubuntu | sudo apt install mold |
| Fedora | sudo dnf install mold |
| Arch Linux | sudo 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 | ベースライン (最速) | 多くのシステムでデフォルト |
| gold | ld より高速 | 大きく取って代わられた |
| lld (LLVM) | より速い | 良いデフォルト、十分にサポート |
| mold | 最速 | 大規模並列リンクに最適 |
sccache と組み合わせてフルウィンを得ます: sccache は再コンパイルを回避、mold は残るリンク速度を上げます。
リソース