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
| Platform | Befehl |
|---|
| Debian/Ubuntu | sudo apt install mold |
| Fedora | sudo dnf install mold |
| Arch Linux | sudo pacman -S mold |
| macOS (Homebrew) | brew install mold |
| From Source | build from the rui314/mold repo |
| Verifikation | mold --version |
Benutzung von mold (drei Wege)
| Methode | Wie |
|---|
| Wrapper | mold -run cargo build / mold -run make |
| Compiler Flag | -fuse-ld=mold (GCC 12+/Clang) |
| Symlink | Point 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"]
| Ansatz | Notiz |
|---|
link-arg=-fuse-ld=mold | Standard, erfordert Clang oder GCC 12+ |
mold -run cargo build | Keine Config-Änderungen benötigt |
| Per-Target-Sektion | Keeps 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
| Option | Effect |
|---|
--threads=N | Limit Worker Threads |
-run CMD | Wrap ein Build-Befehl |
--perf | Print Performance Breakdown |
--stats | Emit Link Statistics |
--gc-sections | Remove Unused Sections |
--icf=all | Identical Code Folding (Kleinere Binaries) |
# Siehe, wo Link-Zeit geht
mold --perf -run cargo build --release
Wann mold am meisten hilft
| Situation | Benefit |
|---|
| Große Binaries mit vielen Objects | Largest Absolute Savings |
| Frequent Incremental Rebuilds | Biggest Quality-of-Life Gain |
| Debug Builds (Large Symbol Tables) | Sehr bemerkbar |
| Viele CPU-Kerne verfügbar | Scales mit Kernes |
| Tiny Projects | Marginal — Link war bereits schnell |
| Notiz | Detail |
|---|
| License | MIT (moderne Versionen) |
| Linux | Vollständig unterstützt, Primäres Ziel |
| macOS | Unterstützt; Apples eigener Linker auch verbessert |
| Windows | Nicht das Primäre Ziel |
mold vs Andere Linker
| Linker | Relative Speed | Notiz |
|---|
| GNU ld | Baseline (Slowest) | Default auf vielen Systemen |
| gold | Schneller als ld | Größtenteils übertroffen |
| lld (LLVM) | Viel schneller | Guter Standard, Gut unterstützt |
| mold | Schnellster | Beste für große Parallel-Links |
Combine mit sccache für den Vollständigen Gewinn: sccache vermeidet Neukompilierung, mold beschleunigt den verbleibenden Link.
Ressourcen