Aller au contenu

mold - Linker haute performance moderne

mold - Linker haute performance moderne

mold (Modern Linker) est un remplacement drop-in pour GNU ld, gold, et LLVM lld qui est conçu dès le départ pour utiliser tous vos cores CPU. Le lien est souvent la queue sérialisée d’un build par ailleurs parallèle — vous compilez 200 fichiers sur 16 cores, puis attendez sur un core pour lier. mold parallélise cette étape, réduisant fréquemment les temps de lien d’un ordre de magnitude, ce qui est plus notable dans les boucles édition-compilation-exécution sur de grands codebases C, C++, et Rust.

Installation

PlateformeCommande
Debian/Ubuntusudo apt install mold
Fedorasudo dnf install mold
Arch Linuxsudo pacman -S mold
macOS (Homebrew)brew install mold
Depuis la sourceconstruire à partir du dépôt rui314/mold
Vérifiermold --version

Utiliser mold (trois façons)

MéthodeComment
Wrappermold -run cargo build / mold -run make
Flag du compilateur-fuse-ld=mold (GCC 12+/Clang)
SymlinkPointer ld vers mold (à l’échelle du système)
# Le plus facile : envelopper n'importe quelle commande de build
mold -run make -j$(nproc)
mold -run cargo build --release

Configuration Rust

# ~/.cargo/config.toml ou .cargo/config.toml du projet
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
ApprocheNote
link-arg=-fuse-ld=moldStandard, nécessite clang ou GCC 12+
mold -run cargo buildAucun changement de config requis
Section per-targetGarde les autres plateformes non affectées

Configuration C/C++

# Flag du compilateur direct
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

Vérifier que mold a été utilisé

# Vérifier le linker enregistré dans la section de commentaire du binaire
readelf -p .comment ./my-binary | grep -i mold

# Ou exécuter avec les stats de mold
mold -run cargo build 2>&1 | tail

Options utiles

OptionEffet
--threads=NLimiter les threads de travail
-run CMDEnvelopper une commande de build
--perfAfficher la ventilation des performances
--statsÉmettre les statistiques de lien
--gc-sectionsSupprimer les sections inutilisées
--icf=allRepliement de code identique (binaires plus petits)
# Voir où va le temps de lien
mold --perf -run cargo build --release

Quand mold aide le plus

SituationBénéfice
Grands binaires avec de nombreux objetsÉconomies absolues les plus grandes
Reconstructions incrémentales fréquentesPlus grand gain de qualité de vie
Builds de débogage (grandes tables de symboles)Très notable
Beaucoup de cores CPU disponiblesS’adapte aux cores
Petits projetsMarginal — le lien était déjà rapide

Notes de licence et de plateforme

NoteDétail
LicenceMIT (versions modernes)
LinuxEntièrement supporté, cible principale
macOSSupporté ; le propre linker d’Apple s’est aussi amélioré
WindowsPas la cible principale

mold vs autres linkers

LinkerVitesse relativeNote
GNU ldBaseline (le plus lent)Par défaut sur beaucoup de systèmes
goldPlus rapide que ldLargement supercédé
lld (LLVM)Beaucoup plus rapideBon par défaut, bien supporté
moldLe plus rapideMeilleur pour les liens parallèles de grande taille

Combiner avec sccache pour la victoire complète : sccache évite la recompilation, mold accélère le lien qui reste.

Ressources