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
| Plateforme | Commande |
|---|
| Debian/Ubuntu | sudo apt install mold |
| Fedora | sudo dnf install mold |
| Arch Linux | sudo pacman -S mold |
| macOS (Homebrew) | brew install mold |
| Depuis la source | construire à partir du dépôt rui314/mold |
| Vérifier | mold --version |
Utiliser mold (trois façons)
| Méthode | Comment |
|---|
| Wrapper | mold -run cargo build / mold -run make |
| Flag du compilateur | -fuse-ld=mold (GCC 12+/Clang) |
| Symlink | Pointer 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"]
| Approche | Note |
|---|
link-arg=-fuse-ld=mold | Standard, nécessite clang ou GCC 12+ |
mold -run cargo build | Aucun changement de config requis |
| Section per-target | Garde 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
| Option | Effet |
|---|
--threads=N | Limiter les threads de travail |
-run CMD | Envelopper une commande de build |
--perf | Afficher la ventilation des performances |
--stats | Émettre les statistiques de lien |
--gc-sections | Supprimer les sections inutilisées |
--icf=all | Repliement de code identique (binaires plus petits) |
# Voir où va le temps de lien
mold --perf -run cargo build --release
Quand mold aide le plus
| Situation | Bénéfice |
|---|
| Grands binaires avec de nombreux objets | Économies absolues les plus grandes |
| Reconstructions incrémentales fréquentes | Plus grand gain de qualité de vie |
| Builds de débogage (grandes tables de symboles) | Très notable |
| Beaucoup de cores CPU disponibles | S’adapte aux cores |
| Petits projets | Marginal — le lien était déjà rapide |
| Note | Détail |
|---|
| Licence | MIT (versions modernes) |
| Linux | Entièrement supporté, cible principale |
| macOS | Supporté ; le propre linker d’Apple s’est aussi amélioré |
| Windows | Pas la cible principale |
mold vs autres linkers
| Linker | Vitesse relative | Note |
|---|
| GNU ld | Baseline (le plus lent) | Par défaut sur beaucoup de systèmes |
| gold | Plus rapide que ld | Largement supercédé |
| lld (LLVM) | Beaucoup plus rapide | Bon par défaut, bien supporté |
| mold | Le plus rapide | Meilleur 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