Salta ai contenuti

mold - Cheatsheet del Linker Moderno e Ad Alte Prestazioni

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

PlatformCommand
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
Verifymold --version

Using mold (three ways)

MethodHow
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 Configuration

# ~/.cargo/config.toml or project .cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
ApproachNote
link-arg=-fuse-ld=moldStandard, richiede clang o GCC 12+
mold -run cargo buildNessun cambio di configurazione necessario
Per-target sectionMantiene 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

OptionEffect
--threads=NLimita i worker thread
-run CMDAvvolgi un comando di build
--perfStampa breakdown delle prestazioni
--statsEmetti statistiche di link
--gc-sectionsRimuovi sezioni non usate
--icf=allIdentical code folding (binari più piccoli)
# See where link time goes
mold --perf -run cargo build --release

When mold Helps Most

SituationBenefit
Large binaries with many objectsRisparmi assoluti più grandi
Frequent incremental rebuildsGuadagno di qualità della vita più grande
Debug builds (large symbol tables)Molto evidente
Many CPU cores availableScala con i core
Tiny projectsMarginale — il link era già veloce

Licensing & Platform Notes

NoteDetail
LicenseMIT (modern versions)
LinuxCompletamente supportato, target primario
macOSSupportato; anche il linker di Apple è migliorato
WindowsNon è il target primario

mold vs Other Linkers

LinkerRelative speedNote
GNU ldBaseline (slowest)Predefinito su molti sistemi
goldPiù veloce di ldLargamente sostituito
lld (LLVM)Molto più veloceBuon default, ben supportato
moldPiù veloceMigliore per link paralleli di grandi dimensioni

Combinalo con sccache per la vittoria completa: sccache evita la ricompilazione, mold accelera il link che rimane.

Resources