ci sono 3 comuni ABI Stati Uniti d'America su macchine standard compatibili Intel (non Itanium).
- La classica architettura a 32 bit, spesso chiamata "x86" in breve, che ha tripli come
i[3-6]86-linux-gnu
. Registri e puntatori sono entrambi a 32 bit.
- L'estensione a 64 bit originariamente da AMD, spesso chiamata "amd64" in breve, che ha GNU triplo di
x86_64-linux-gnu
. Registri e puntatori sono entrambi a 64 bit.
- Il nuovo ABI "x32", con una tripla di
x86_64-linux-gnux32
. I registri sono a 64 bit, ma i puntatori sono solo a 32 bit, risparmiando molta memoria nei flussi di lavoro a puntatore. Garantisce inoltre che tutte le altre funzionalità del processore a 64 bit siano disponibili.
Ciascuna interfaccia di cui sopra ha il suo sulla chiamata di sistema, proprio ld.so
, proprio insieme completo di librerie, ecc, ma è possibile eseguire tutti e 3 sullo stesso kernel.
Su Linux, i caricatori sono:
% objdump -f /lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-x32.so.2
/lib/ld-linux.so.2: file format elf32-i386
architecture: i386, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x00000a90
/lib64/ld-linux-x86-64.so.2: file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0000000000000c90
/libx32/ld-linux-x32.so.2: file format elf32-x86-64
architecture: i386:x64-32, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x00000960
Ora, se stai ricevendo il messaggio di "saltare biblioteca incompatibile", che significa qualcosa è incasinato con la configurazione. Assicurati di non avere variabili negative nell'ambiente o di passare sulla riga di comando, o file installati al di fuori del controllo del gestore pacchetti.
Si noti che le librerie statiche sono generalmente * di gran lunga più problematiche di quanto valgano. Usa le librerie dinamiche, con un '$ {ORIGIN}' -relativo '-rpath' se * hai * veramente * bisogno e non hai bisogno di' setuid' o di qualsiasi altra 'capacità'. – o11c