PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linux 32-Bit Anwendung auf 64-Bit ausführen


Gast
2007-07-24, 17:11:38
Hallo,

da man hierzu im Netz nur schwer gute Dokumentation findet, frage ich einfach mal hier:

Welche Unterschiede bestehen zwischen einem Linux-32 Bit System und den Linux 32-Bit Bibliotheken auf einem Linux 64-Bit System?

Von 32 zu 64 Bit weiss ich, dass der wichtigste Unterschied die größen der Datentypen sind.

long @ 32: 4 byte
long @ 64: 8 byte
pointer @ 32: 4 byte
pointer @ 64: 8 byte

Auf ein 64-Bit Debian habe ich gerade eine kleine test binary von einem 32-Bit system geschafft. Es gibt im prinzip nur die Größe eines long aus. Die Ausgabe auf dem 64-Bit System: 4 byte

Ich schliesse daraus, dass demnach mit den Kompatibilitätsbibliotheken die Größe aller Datentypen gleich bleibt.

Meine Konkrete Frage:
Welche Unterschiede sollte ich beachten?

Ganon
2007-07-24, 17:19:51
long bleibt afaik überall 32bit, auch auf 64bit Systemen. "long long" ist 64bit.

Nur die Pointer werden größer.

PHuV
2007-07-24, 17:21:41
Welche Unterschiede bestehen zwischen einem Linux-32 Bit System und den Linux 32-Bit Bibliotheken auf einem Linux 64-Bit System?


Nach meine bisherigen Erfahrungen keine. Je nach OS wird in einem 64 Bit OS eine Art Emulationsmodus gefahren, wenn 32-Bit-Anwendungen verwendet werden. Bei einer HPUX gibt es beispielsweise, bedingt durch den Prozessorwechsel von PAXXX auf Itanium durchaus Unterschiede in den 32 Bit Libs. Unter Linux und mit x86-Übersetzung hast Du jedoch hier keine Unterschiede.


Von 32 zu 64 Bit weiss ich, dass der wichtigste Unterschied die größen der Datentypen sind.

long @ 32: 4 byte
long @ 64: 8 byte


Korrekt

pointer @ 32: 4 byte
pointer @ 64: 8 byte


Wobei Du aber auf den Typ des Pointers achten mußt, ein char * ist nach wie vor 1 Byte, und ein int * nur 4 Byte.


Auf ein 64-Bit Debian habe ich gerade eine kleine test binary von einem 32-Bit system geschafft. Es gibt im prinzip nur die Größe eines long aus. Die Ausgabe auf dem 64-Bit System: 4 byte

Ich schliesse daraus, dass demnach mit den Kompatibilitätsbibliotheken die Größe aller Datentypen gleich bleibt.


Jop, je nachdem, wie Du übersetzt (32 oder 64 Bit), werden entsprechend die Datentypen ausgegeben, wobei sich nur der Datentyp long ändert, alle anderen bleiben gleich.


Meine Konkrete Frage:
Welche Unterschiede sollte ich beachten?

Welche Unterschiede bei was? Beim Coden? Beim Portieren? Bei den Libs? :confused:

long bleibt afaik überall 32bit, auch auf 64bit Systemen. "long long" ist 64bit.

Nur die Pointer werden größer.

Falsch, nach C99-Standard in 64 Bit immer long 8 Bit. Long long ist noch eine Zusatzerweiterung seit C99. Auf allen mir bekannte Plattformen (Solaris 9,10, HPUX 11.23, AIX 5.3 und Linux x64) kann man anstelle long long nur long für 64 Bit verwenden, und ich würde für die Portabilität immer nur long verwenden, und nicht die Krücke long long (die auch in 32 Bit als 64 Bit-Darstellung verwendet werden kann).

Gast
2007-07-24, 17:37:08
Dies war meine Referenz für die Grösse der Datentypen:
http://www.ibm.com/developerworks/library/l-port64.html


Welche Unterschiede bei was? Beim Coden? Beim Portieren? Bei den Libs?


Ich will eine 32 Bit Anwendung auf nem 32 Bit System kompiliert auf ne 64 Bit Maschiene bringen. Portieren muss ich hier ja nicht wirklich. Oder doch? Das will ich wissen.

Augenscheinlich gibt es hier keine Probleme, alles läuft wie erwartet. Aber um sicher zu gehen würde ich gerne genau wissen, womit ich rechnen muss.

PHuV
2007-07-24, 18:24:01
Ich will eine 32 Bit Anwendung auf nem 32 Bit System kompiliert auf ne 64 Bit Maschiene bringen. Portieren muss ich hier ja nicht wirklich. Oder doch? Das will ich wissen.

Augenscheinlich gibt es hier keine Probleme, alles läuft wie erwartet. Aber um sicher zu gehen würde ich gerne genau wissen, womit ich rechnen muss.

Bleibst Du bei einem Prozessortyp (z.B. Intel x86 bzw. AMD)? Dann hast Du keine Probleme zu befürchten, Du kannst die Programme einfach verwenden, wenn Du die entsprechenden Libs installiert hast.