Zum Inhalt springen

mold - Modern High-Performance Linker Cheatsheet

mold - Modern High-Performance Linker Cheatsheet

mold (Modern Linker) ist ein Drop-in-Ersatz für GNU ld, gold und LLVM lld, der von Grund auf entwickelt wurde, um alle deine CPU-Kerne zu nutzen. Linking ist oft der serialisierte Schwanz eines ansonsten-parallelen Builds — du kompilierst 200 Dateien über 16 Kerne, dann wartest auf einen Kern zum Linken. mold parallelisiert diesen Schritt, was häufig Link-Zeiten um eine Größenordnung reduziert, was in Edit-Compile-Run-Loops bei großen C, C++ und Rust-Codebases am meisten bemerkbar ist.

Installation

PlatformBefehl
Debian/Ubuntusudo apt install mold
Fedorasudo dnf install mold
Arch Linuxsudo pacman -S mold
macOS (Homebrew)brew install mold
From Sourcebuild from the rui314/mold repo
Verifikationmold --version

Benutzung von mold (drei Wege)

MethodeWie
Wrappermold -run cargo build / mold -run make
Compiler Flag-fuse-ld=mold (GCC 12+/Clang)
SymlinkPoint ld at mold (system-wide)
# Easiest: wrap any build command
mold -run make -j$(nproc)
mold -run cargo build --release

Rust-Konfiguration

# ~/.cargo/config.toml or project .cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
AnsatzNotiz
link-arg=-fuse-ld=moldStandard, erfordert Clang oder GCC 12+
mold -run cargo buildKeine Config-Änderungen benötigt
Per-Target-SektionKeeps andere Plattformen unbeeinträchtigt

C/C++-Konfiguration

# Direct Compiler Flag
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

Verifikation, dass mold benutzt wurde

# Check the Linker aufgenommen in der Binary's Comment-Sektion
readelf -p .comment ./my-binary | grep -i mold

# Oder run mit mold's Stats
mold -run cargo build 2>&1 | tail

Nützliche Optionen

OptionEffect
--threads=NLimit Worker Threads
-run CMDWrap ein Build-Befehl
--perfPrint Performance Breakdown
--statsEmit Link Statistics
--gc-sectionsRemove Unused Sections
--icf=allIdentical Code Folding (Kleinere Binaries)
# Siehe, wo Link-Zeit geht
mold --perf -run cargo build --release

Wann mold am meisten hilft

SituationBenefit
Große Binaries mit vielen ObjectsLargest Absolute Savings
Frequent Incremental RebuildsBiggest Quality-of-Life Gain
Debug Builds (Large Symbol Tables)Sehr bemerkbar
Viele CPU-Kerne verfügbarScales mit Kernes
Tiny ProjectsMarginal — Link war bereits schnell

Lizenzierung & Platform-Notizen

NotizDetail
LicenseMIT (moderne Versionen)
LinuxVollständig unterstützt, Primäres Ziel
macOSUnterstützt; Apples eigener Linker auch verbessert
WindowsNicht das Primäre Ziel

mold vs Andere Linker

LinkerRelative SpeedNotiz
GNU ldBaseline (Slowest)Default auf vielen Systemen
goldSchneller als ldGrößtenteils übertroffen
lld (LLVM)Viel schnellerGuter Standard, Gut unterstützt
moldSchnellsterBeste für große Parallel-Links

Combine mit sccache für den Vollständigen Gewinn: sccache vermeidet Neukompilierung, mold beschleunigt den verbleibenden Link.

Ressourcen