No contexto do software do sistema, "Triple" normalmente se refere a um identificador de três partes, especificando a arquitetura, sistema operacional do sistema de destino e implementação da biblioteca padrão C ++ . É usado principalmente em sistemas de construção (como CMake, Meson e outros) e compiladores para identificar exclusivamente o ambiente para o qual o software deve ser compilado.
As três partes são:
*
Arquitetura (ou destino): Isso especifica a arquitetura do processador (por exemplo, x86_64, ARMV7, AARCH64, RISCV64). Ele dita o conjunto de instruções que o código compilado usará.
*
sistema operacional (ou fornecedor): Isso identifica o sistema operacional (por exemplo, Linux, Windows, MacOS, FreeBSD). Isso influencia como o programa interage com os recursos do sistema (arquivos, memória etc.).
*
C ++ Biblioteca padrão (ou ABI): Isso especifica a implementação da biblioteca padrão C ++ (por exemplo, libstdc ++ para GCC, libc ++ para clang). Ele determina o ABI (Application Binária Interface), que governa como o código compilado interage com a biblioteca padrão. Diferentes implementações podem ter ABIs incompatíveis, mesmo na mesma arquitetura e sistema operacional.
Exemplo: `x86_64-linux-gnu`
*
x86_64: Arquitetura x86 de 64 bits.
*
Linux: Sistema operacional Linux.
*
gnu: Biblioteca padrão GNU C ++ (libstdc ++)
Outro exemplo:
`Aarch64-apple-darwin`
*
aarch64: Arquitetura de braço de 64 bits.
*
Apple: Sistema operacional da Apple.
*
darwin: O núcleo dos sistemas operacionais da Apple (macOS, iOS etc.). Isso geralmente implica uma implementação específica da biblioteca padrão C ++ usada pelo compilador da Apple.
O triplo permite que os sistemas de construção gerem comandos corretos do compilador e do vinculador para o ambiente de destino especificado. Se você compilar o código sem considerar o triplo, o executável resultante pode não ser executado no sistema pretendido. A compilação cruzada depende muito da especificação tripla correta para criar código para um alvo diferente da máquina de construção.