Ir al contenido

mold - Enlazador Moderno de Alto Rendimiento Hoja de Trucos

mold - Enlazador Moderno de Alto Rendimiento Hoja de Trucos

mold (Modern Linker) es un reemplazo de drop-in para GNU ld, gold y LLVM lld que está diseñado desde el principio para usar todos los núcleos de tu CPU. El enlazamiento es a menudo la cola serializada de una compilación de otro modo paralela — compilas 200 archivos en 16 núcleos, luego esperas en un núcleo para enlazar. mold paraleliza ese paso, frecuentemente reduciendo tiempos de enlace por un orden de magnitud, que es más notable en bucles de edición-compilación-ejecución en codebases grandes de C, C++ y Rust.

Instalación

PlataformaComando
Debian/Ubuntusudo apt install mold
Fedorasudo dnf install mold
Arch Linuxsudo pacman -S mold
macOS (Homebrew)brew install mold
Desde fuentecompilar desde repo rui314/mold
Verificarmold --version

Usar mold (tres formas)

MétodoCómo
Wrappermold -run cargo build / mold -run make
Flag del compilador-fuse-ld=mold (GCC 12+/Clang)
SymlinkApuntar ld a mold (a nivel de sistema)
# Lo más fácil: envolver cualquier comando de compilación
mold -run make -j$(nproc)
mold -run cargo build --release

Configuración Rust

# ~/.cargo/config.toml o .cargo/config.toml del proyecto
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
EnfoqueNota
link-arg=-fuse-ld=moldEstándar, requiere clang o GCC 12+
mold -run cargo buildNo necesita cambios de configuración
Sección por-targetMantiene otras plataformas sin afectar

Configuración C/C++

# Flag del compilador directo
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

Verificar que se Usó mold

# Verificar el enlazador grabado en la sección de comentario del binario
readelf -p .comment ./my-binary | grep -i mold

# O ejecutar con estadísticas de mold
mold -run cargo build 2>&1 | tail

Opciones Útiles

OpciónEfecto
--threads=NLimitar hilos de worker
-run CMDEnvolver un comando de compilación
--perfImprimir desglose de rendimiento
--statsEmitir estadísticas de enlace
--gc-sectionsRemover secciones no usadas
--icf=allPlegado de código idéntico (binarios más pequeños)
# Ver a dónde va el tiempo de enlace
mold --perf -run cargo build --release

Cuándo mold Ayuda Más

SituaciónBeneficio
Binarios grandes con muchos objetosMayores ahorros absolutos
Reconstrucciones incrementales frecuentesMayor ganancia de calidad de vida
Compilaciones debug (tablas de símbolos grandes)Muy notable
Muchos núcleos de CPU disponiblesEscala con núcleos
Proyectos minúsculosMarginal — enlazamiento ya era rápido

Licencia y Notas de Plataforma

NotaDetalle
LicenciaMIT (versiones modernas)
LinuxCompletamente soportado, objetivo principal
macOSSoportado; el enlazador propio de Apple también mejoró
WindowsNo el objetivo principal

mold vs Otros Enlazadores

EnlazadorVelocidad relativaNota
GNU ldLínea base (más lento)Predeterminado en muchos sistemas
goldMás rápido que ldMayormente supersedido
lld (LLVM)Mucho más rápidoBuen predeterminado, bien soportado
moldMás rápidoMejor para enlaces paralelos grandes

Se combina bien con sccache para la victoria completa: sccache evita recompilar, mold acelera el enlace que queda.

Recursos