Las tres partes son:
* Arquitectura (o objetivo): Esto especifica la arquitectura del procesador (por ejemplo, x86_64, ARMV7, AARCH64, RISCV64). Dicta el conjunto de instrucciones que utilizará el código compilado.
* Sistema operativo (o proveedor): Esto identifica el sistema operativo (por ejemplo, Linux, Windows, MacOS, FreeBSD). Esto influye en cómo el programa interactúa con los recursos del sistema (archivos, memoria, etc.).
* C ++ Biblioteca estándar (o ABI): Esto especifica la implementación de la biblioteca estándar C ++ (por ejemplo, libstdc ++ para GCC, libc ++ para rectores). Determina el ABI (interfaz binaria de aplicación), que rige cómo interactúa el código compilado con la biblioteca estándar. Las diferentes implementaciones pueden tener ABI incompatibles, incluso en la misma arquitectura y sistema operativo.
Ejemplo:
`x86_64-linux-gnu`
* x86_64: Arquitectura X86 de 64 bits.
* Linux: Sistema operativo Linux.
* gnu: Biblioteca estándar GNU C ++ (libstdc ++)
Otro ejemplo:
`Aarch64-Apple-Darwin`
* aarch64: Arquitectura ARM de 64 bits.
* Apple: Sistema operativo de Apple.
* Darwin: El núcleo de los sistemas operativos de Apple (macOS, iOS, etc.). Esto a menudo implica una implementación específica de biblioteca estándar C ++ utilizada por el compilador de Apple.
El triple permite que los sistemas de compilación generen comandos correctos compiladores y enlazadores para el entorno de destino especificado. Si compila el código sin considerar el triple, el ejecutable resultante podría no ejecutarse en el sistema previsto. La compilación cruzada se basa en gran medida en la especificación triple correcta para crear código para un objetivo diferente al de la máquina de compilación.