Porting Howto
(oder was muss man beachten, damit 32bit Software problemlos auf 64bit Plattformen läuft)
Das Problem wurde bei mir erstmalig aktuell, als wir SELinux auf die Alpha-Plattform übersetzen wollten. Das SELinux-Userland machte riesige Sperenzchen, und nach dem ersten Blick in den Quellcode wurde auch der Grund dafür klar.
Grundlegende Datentypen
- char, word und int sind wie auf 32bit-Plattformen definiert (8,16 und 32bit breit).
- int ist 32bit breit
- long ist 64bit breit
sämtliche Pointer sind 64bit breit, Pointer passen also nicht mehr in ints
Compiler
- Auf jeden Fall ist es empfehlenswert, auf einer 64bit Plattform zu kompilieren, dann spuckt der Compiler auch gleich die richtigen Fehler aus;
- Zusätzlich zu "-Wall -W" empfiehlt es sich, "-Wconversion" einzuschalten (damit werden dann sehr viele dubiose Casts angemeckert, die man sich anschauen sollte)
Hilfreiches
- Bei Umstieg auf plattformunabhängige Datentypen empfiehlt es sich, gleich auf den aktuellen C99-Standard umzusteigen und die dort definierten Typen und Prototypen zu benutzen.