I samband med systemprogramvara hänvisar "trippel" vanligtvis till en
trepartsidentifierare som anger målsystemets arkitektur, operativsystem och C ++ standardbibliotekimplementering . Det används främst i byggsystem (som CMake, Meson och andra) och kompilatorer för att unikt identifiera miljön för vilken programvara ska sammanställas.
De tre delarna är:
* arkitektur (eller mål): Detta specificerar processorarkitekturen (t.ex. x86_64, ARMV7, AARCH64, RISCV64). Det dikterar den instruktion som den sammanställda koden kommer att använda.
* operativsystem (eller leverantör): Detta identifierar operativsystemet (t.ex. Linux, Windows, MacOS, FreeBSD). Detta påverkar hur programmet interagerar med systemets resurser (filer, minne etc.).
* C ++ Standardbibliotek (eller ABI): Detta specificerar implementeringen av C ++ standardbiblioteket (t.ex. libstdc ++ för GCC, libc ++ för clang). Den bestämmer ABI (Application Binary Interface), som styr hur sammanställd kod interagerar med standardbiblioteket. Olika implementeringar kan ha oförenliga ABI:er, även på samma arkitektur och operativsystem.
Exempel:
`x86_64-linux-gnu`
* x86_64: 64-bitars x86 arkitektur.
* Linux: Linux operativsystem.
* gnu: GNU C ++ Standard Library (libstdc ++)
Ett annat exempel:
`AARCH64-APPLE-DARWIN`
* aarch64: 64-bitars armarkitektur.
* Apple: Apples operativsystem.
* darwin: Kärnan i Apples operativsystem (macOS, iOS, etc.). Detta innebär ofta en specifik C ++ standardbibliotekimplementering som används av Apples kompilator.
Triple gör det möjligt för byggsystem att generera korrekta kompilator- och länkkommandon för den angivna målmiljön. Om du kompilerar kod utan att överväga trippeln kanske den resulterande körbara utsättningen inte körs på det avsedda systemet. Tvärkompilering förlitar sig starkt på rätt trippelspecifikation för att bygga kod för ett annat mål än byggmaskinen.