mold é um substituto mais rápido para linkers Unix existentes.
É várias vezes mais rápido que o vinculador LLVM lld e o GNU ld.
O mold
visa aumentar a produtividade do desenvolvedor, minimizando o tempo de construção, especialmente em ciclos rápidos de depuração, edição e reconstrução.
Aqui está uma comparação de desempenho de GNU ld, GNU gold, LLVM lld e mold ao vincular executáveis finais habilitados para debuginfo para grandes programas em uma máquina simulada de 16 núcleos e 32 threads.
Programa (tamanho de saída do vinculador) | GNU ld | GNU gold | LLVM lld | mold |
---|---|---|---|---|
MySQL 8.3 (0.47 GiB) | 10.84s | 7.47s | 1.64s | 0.46s |
Clang 19 (1.56 GiB) | 42.07s | 33.13s | 5.20s | 1.35s |
Chromium 124 (1.35 GiB) | N/A | 27.40s | 6.10s | 1.52s |
o mold suporta: x86-64, i386, ARM64, ARM32, 64 bits/32 bits little/big-endian RISC-V, PowerPC de 32 bits, 64 bits big-endian PowerPC ELFv1, 64 bits little-endian PowerPC ELFv2 , s390x, LoongArch de 64/32 bits, SPARC64, m68k, SH-4 e DEC Alpha.
Aqui está uma comparação lado a lado do uso de CPU por núcleo para lld (esquerda) e molde (direita), vinculando o mesmo programa, um executável do Chromium.
Se você estiver usando uma linguagem compilada como C, C++ ou Rust, uma compilação consiste em duas fases.
Na primeira fase, um compilador compila os arquivos fonte em arquivos objeto (arquivos .o
).
Na segunda fase, um vinculador pega todos os arquivos-objeto e os combina em um único arquivo executável ou de biblioteca compartilhada.
A segunda fase pode ser demorada se a saída do build for grande.
O mold pode acelerar esse processo, economizando tempo e evitando distrações enquanto espera a conclusão de uma longa construção.
A diferença é mais perceptível durante ciclos rápidos de depuração, edição e reconstrução.
O mold
está disponível em quase todos os repositórios de gerenciadores de pacotes, exemplo:
E entre diversos outros! Use o search do seu gerenciador de pacotes para encontrá-lo!
Se você for compilar arquivos C/C++, por exemplo use a flag: fuse-ld=mold
:
Se for compilar arquivos Assembly, exemplo hello.s
(GNU Assembler - GAS):
Compile normalmente:
E use o mold para linkar:
Verificando se o elf
foi linkado com mold
:
Para mais informações acesse o repositório no GiiHub.