mold - Cheatsheet del Linker Moderno e Ad Alte Prestazioni
mold (Modern Linker) è un sostituto drop-in per GNU ld, gold e LLVM lld progettato da zero per utilizzare tutti i core della tua CPU. Il linking è spesso la coda serializzata di un build altrimenti parallelo — compili 200 file su 16 core, poi aspetti su un core per fare il link. mold parallelizza quel passo, riducendo frequentemente i tempi di link di un ordine di grandezza, il che è più evidente nei cicli di modifica-compilazione-esecuzione su codebase C, C++ e Rust di grandi dimensioni.
Installation
| Platform | Command |
|---|
| 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 |
| Verify | mold --version |
Using mold (three ways)
| Method | How |
|---|
| 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 Configuration
# ~/.cargo/config.toml or project .cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
| Approach | Note |
|---|
link-arg=-fuse-ld=mold | Standard, richiede clang o GCC 12+ |
mold -run cargo build | Nessun cambio di configurazione necessario |
| Per-target section | Mantiene altre piattaforme non interessate |
C/C++ Configuration
# 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
Verifying mold Was Used
# Check the linker recorded in the binary's comment section
readelf -p .comment ./my-binary | grep -i mold
# Or run with mold's stats
mold -run cargo build 2>&1 | tail
Useful Options
| Option | Effect |
|---|
--threads=N | Limita i worker thread |
-run CMD | Avvolgi un comando di build |
--perf | Stampa breakdown delle prestazioni |
--stats | Emetti statistiche di link |
--gc-sections | Rimuovi sezioni non usate |
--icf=all | Identical code folding (binari più piccoli) |
# See where link time goes
mold --perf -run cargo build --release
When mold Helps Most
| Situation | Benefit |
|---|
| Large binaries with many objects | Risparmi assoluti più grandi |
| Frequent incremental rebuilds | Guadagno di qualità della vita più grande |
| Debug builds (large symbol tables) | Molto evidente |
| Many CPU cores available | Scala con i core |
| Tiny projects | Marginale — il link era già veloce |
| Note | Detail |
|---|
| License | MIT (modern versions) |
| Linux | Completamente supportato, target primario |
| macOS | Supportato; anche il linker di Apple è migliorato |
| Windows | Non è il target primario |
mold vs Other Linkers
| Linker | Relative speed | Note |
|---|
| GNU ld | Baseline (slowest) | Predefinito su molti sistemi |
| gold | Più veloce di ld | Largamente sostituito |
| lld (LLVM) | Molto più veloce | Buon default, ben supportato |
| mold | Più veloce | Migliore per link paralleli di grandi dimensioni |
Combinalo con sccache per la vittoria completa: sccache evita la ricompilazione, mold accelera il link che rimane.
Resources