Per alcune ragioni che il nostro cuore non conosce, certe volte si ha bisogno di compilare sorgenti C a 32 bit.
Se però abbiamo un sistema operativo a 64 bit, non siamo costretti per forza ad installarne un altro a 32 bit in un'altra partizione o su una macchina virtuale. Infatti, è possibile installare la versione a 32 bit delle librerie glibc per compilare così i nostri programmi a 32 bit.
Su Fedora, apriamo un terminale e digitiamo:
yum install glibc-devel.i686
Dopo pochi secondi di download avremo le nostre librerie installate sul sistema.
Adesso però (e spero che non sia così) alcuni di voi si staranno domandando: "non è che adesso però, i nostri programmi verranno compilati sempre a 32 bit?".
Ovviamente no, la compilazione di default sarà sempre quella a 64 bit. Infatti ogni volta che si vorrà compilare un programma a 32 bit si dovrà aggiungere, ai parametri di compilazione, la flag -m32. Ad esempio, se voglio compilare un programma chiamato prog da un sorgente chiamato main.c devo dare il comando:
gcc main.c -m32 -o prog
Adesso non che ci sia bisogno di questo passaggio, vorrei ben dire! Ma siccome voglio apparire più sapiente di quello che sono mostrando tecnicaglie a random, vi porrò la fatidica domanda: "come verifico che il programma è stato compilato davvero a 32 bit?". In questo caso ci viene in aiuto readelf, un programma che ci dà informazioni sugli eseguibili:
readelf -h prog | grep "Class:"
Questo comando risponderà con questa stringa:
Class: ELF32
Se il programma fosse stato invece compilato a 64 bit avrebbe risposto con ELF64.