In de context van systeemsoftware verwijst 'triple' doorgaans naar een driedelige identificatie die de architectuur, het besturingssysteem en de C++ Standard Library-implementatie van het doelsysteem specificeert . Het wordt voornamelijk gebruikt in bouwsystemen (zoals CMake, Meson en anderen) en compilers om op unieke wijze de omgeving te identificeren waarvoor software moet worden gecompileerd.
De drie delen zijn:
* Architectuur (of doel): Dit specificeert de processorarchitectuur (bijvoorbeeld x86_64, armv7, aarch64, riscv64). Het dicteert de instructieset die de gecompileerde code zal gebruiken.
* Besturingssysteem (of leverancier): Dit identificeert het besturingssysteem (bijvoorbeeld Linux, Windows, Macos, Freebsd). Dit beïnvloedt de manier waarop het programma samenwerkt met de systeembronnen (bestanden, geheugen, enz.).
* C++ standaardbibliotheek (of ABI): Dit specificeert de implementatie van de C++ Standard Library (bijvoorbeeld libstdc++ voor GCC, libc++ voor Clang). Het bepaalt de ABI (Application Binary Interface), die bepaalt hoe gecompileerde code samenwerkt met de standaardbibliotheek. Verschillende implementaties kunnen incompatibele ABI's hebben, zelfs op dezelfde architectuur en hetzelfde besturingssysteem.
Voorbeeld:
`x86_64-linux-gnu`
* x86_64: 64-bit x86-architectuur.
* linux: Linux-besturingssysteem.
* gnu: GNU C++ standaardbibliotheek (libstdc++)
Nog een voorbeeld:
`aarch64-apple-darwin`
* aarch64: 64-bits ARM-architectuur.
* appel: Het besturingssysteem van Apple.
* Darwin: De kern van de besturingssystemen van Apple (macOS, iOS, enz.). Dit impliceert vaak een specifieke C++ Standard Library-implementatie die wordt gebruikt door de compiler van Apple.
Met de triple kunnen bouwsystemen correcte compiler- en linkeropdrachten genereren voor de opgegeven doelomgeving. Als u code compileert zonder rekening te houden met de triple, kan het resulterende uitvoerbare bestand mogelijk niet op het beoogde systeem worden uitgevoerd. Cross-compilatie is sterk afhankelijk van de juiste drievoudige specificatie om code te bouwen voor een ander doel dan de bouwmachine. |