Eles são abordagens diferentes para o mesmo problema geral, com escopos um pouco diferentes: executar binários criados para diferentes arquiteturas.
Quando você recebe um binário para executar, precisa de três coisas: as bibliotecas necessárias (se houver, incluindo seu carregador dinâmico), suporte para as chamadas do sistema feitas e a capacidade de interpretar as instruções da máquina que ele contém . Multilib e multiarch abordam o primeiro.
O Multilib funciona com uma tabela de variantes conhecidas, por arquitetura. Isso abordou originalmente as variantes ABI, por exemplo, no MIPS, mas seu uso mais comum hoje em dia é o suporte a 32 bits no x86: ele normalmente define lib32
como o diretório da biblioteca de 32 bits (e essa definição é x86 -específico). Portanto, uma configuração de multilib pode fornecer o carregador de 64 bits em /lib
e o de 32 bits em /lib32
. No lado do compilador, você especifica -m32
para construir um binário de 32 bits usando multilib.
O multiarch é mais geral: suas definições não dependem da arquitetura do host. Todas as bibliotecas são encontradas em um subdiretório lib
correspondente à arquitetura de destino. /usr/lib/x86_64-linux-gnu/
, /usr/lib/i386-linux-gnu
, etc. No lado do compilador, você usa o compilador apropriado.
Qual abordagem você usa para executar um binário de 32 bits depende da distribuição. Debian e seus derivados agora usam multiarch, outras distribuições usam multilib.