Pular para o conteúdo

mold - Linker de Alto Desempenho Moderno

mold - Linker de Alto Desempenho Moderno

mold (Modern Linker) é uma substituição drop-in para GNU ld, gold, e LLVM lld que é projetada do zero para usar todos seus núcleos de CPU. Linkagem é frequentemente a cauda serializada de uma compilação de outro modo paralela — você compila 200 arquivos em 16 núcleos, depois espera em um núcleo para linkar. mold paraleliza esse passo, frequentemente reduzindo tempos de ligação por uma ordem de magnitude, que é mais notável em loops de edição-compilação-execução em grandes codebases C, C++, e Rust.

Instalação

PlataformaComando
Debian/Ubuntusudo apt install mold
Fedorasudo dnf install mold
Arch Linuxsudo pacman -S mold
macOS (Homebrew)brew install mold
Do sourceconstruir do repo rui314/mold
Verificarmold --version

Usando mold (três jeitos)

MétodoComo
Wrappermold -run cargo build / mold -run make
Flag de compilador-fuse-ld=mold (GCC 12+/Clang)
SymlinkApontar ld para mold (system-wide)
# Mais fácil: encapsular qualquer comando de compilação
mold -run make -j$(nproc)
mold -run cargo build --release

Configuração de Rust

# ~/.cargo/config.toml ou .cargo/config.toml do projeto
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
AbordagemNota
link-arg=-fuse-ld=moldPadrão, requer clang ou GCC 12+
mold -run cargo buildSem mudanças de config necessárias
Seção por-targetMantém outras plataformas não afetadas

Configuração de C/C++

# Flag de compilador direto
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

Verificando se mold Foi Usado

# Verificar o linker registrado na seção de comentário do binário
readelf -p .comment ./my-binary | grep -i mold

# Ou executar com stats de mold
mold -run cargo build 2>&1 | tail

Opções Úteis

OpçãoEfeito
--threads=NLimitar threads de worker
-run CMDEncapsular um comando de compilação
--perfImprimir desempenho breakdown
--statsEmitir estatísticas de ligação
--gc-sectionsRemover seções não usadas
--icf=allFolding de código idêntico (binários menores)
# Ver onde o tempo de ligação vai
mold --perf -run cargo build --release

Quando mold Ajuda Mais

SituaçãoBenefício
Binários grandes com muitos objetosPoupança absoluta maior
Rebuilds incrementais frequentesMaior ganho de qualidade de vida
Debug builds (grandes tabelas de símbolos)Muito notável
Muitos núcleos de CPU disponíveisEscala com núcleos
Projetos minúsculosMarginal — ligação já era rápida

Notas de Licença e Plataforma

NotaDetalhe
LicençaMIT (versões modernas)
LinuxTotalmente suportado, alvo primário
macOSSuportado; linker próprio de Apple também melhorou
WindowsNão é o alvo primário

mold vs Outros Linkers

LinkerVelocidade relativaNota
GNU ldBaseline (mais lento)Padrão em muitos sistemas
goldMais rápido que ldAmplamente substituído
lld (LLVM)Muito mais rápidoBom padrão, bem suportado
moldMais rápidoMelhor para grandes linkagens paralelas

Combine com sccache para a vitória completa: sccache corta tempo de compilação, mold corta tempo de ligação.

Recursos