Was muß ich beachten, wenn ich beispielsweise ein bislang für Linux 32-bit ausgetestes Programm für Linux 64-bit generieren lasse?
- Ändern sich die Größen von Variablen? (Ich denke mal dass ich alle Speicheranforderungen mit "sizeof" versehen habe, bin aber nicht sicher)
Gibt es Fallstricke, die ich berücksichtigen muß?
Gibt es Hilfeseiten, die sich speziell mit diesen Problemen beschäftigen?
Wenn ich auf dem Mac compiliere, habe ich dann eigentlich ein 32- oder ein 64-bit-Programm?
Gibt es einen Grund, ein Windows 32 Programm für Windows 64 zu veröffentlichen?
Läuft ein Linux 32 Programm auf einem Linux 64 System? (Ein User meines Programms berichtete, es liefe nicht. Ist das grundsätzlich so oder hat er ein anderes Problem.)
32 bit und 64 bit Programm als target - Fallstricke?
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: 32 bit und 64 bit Programm als target - Fallstricke?
Alle Zeigertypen ändern sich (untypisierte und typisierte Zeiger, Variablen für dynamische Arrays, Klassenvariablen, Interfaces, etc.). Falls du Zeiger in Ganzzahl casten möchstest, gibt es PtrInt und PtrUInt.Martin V hat geschrieben:- Ändern sich die Größen von Variablen? (Ich denke mal dass ich alle Speicheranforderungen mit "sizeof" versehen habe, bin aber nicht sicher)
Für Dimensionen im Speicher (Länge von Strings/Arrays) sollte SizeInt bzw. SizeUInt verwendet werden.
Im Free Pascal Wiki finden sich mit Sicherheit einige Informationen.Martin V hat geschrieben:Gibt es Hilfeseiten, die sich speziell mit diesen Problemen beschäftigen?
Bei Mac ist AFAIK das abhängig vom WidgetSet.Martin V hat geschrieben:Wenn ich auf dem Mac compiliere, habe ich dann eigentlich ein 32- oder ein 64-bit-Programm?
Gibt es einen Grund, ein Windows 32 Programm für Windows 64 zu veröffentlichen?
Läuft ein Linux 32 Programm auf einem Linux 64 System? (Ein User meines Programms berichtete, es liefe nicht. Ist das grundsätzlich so oder hat er ein anderes Problem.)
Bei Win64 gab es einen Fehler in der Exception-Behandlung im Free Pascal Compiler. Hier solltest du eine hinreichend aktuelle Version verwenden.
Unter Linux müssen natürlich die passenden Bibliotheken zur jeweiligen Programmversion installiert sein. D.h. von den wichtigsten Bibliotheken (z.B. GTK/QT) hat man dann alles in 32 und 64 Bit installiert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 6914
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: 32 bit und 64 bit Programm als target - Fallstricke?
Somit müsste folgender Code so aussehen ?Für Dimensionen im Speicher (Länge von Strings/Arrays) sollte SizeInt bzw. SizeUInt verwendet werden.
Code: Alles auswählen
procedure WriteFloatArray(a: TSingleArray; stream: TFileStream);
var
// len: integer;
len: SizeUInt;
begin
len := Length(a);
stream.Write(len, SizeOf(len));
if len > 0 then begin
stream.Write(a[0], len * SizeOf(a[0]));
end;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: 32 bit und 64 bit Programm als target - Fallstricke?
SizeInt und SizeUInt sind keine nativen Datentypen (die der Compiler kennt). Du kannst dir deren Deklaration im Quelltext ansehen.Mathias hat geschrieben:Ist SizeUInt immer gleich gross, egal ob 32 oder 64Bit ?
Auf 32 Bit sind SizeInt und SizeUInt 32 Bit groß; auf 64 Bit-Systemen je 64 Bit.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 2119
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: 32 bit und 64 bit Programm als target - Fallstricke?
´Wenn ich auf dem Mac compiliere, habe ich dann eigentlich ein 32- oder ein 64-bit-Programm?
Gibt es einen Grund, ein Windows 32 Programm für Windows 64 zu veröffentlichen?
Läuft ein Linux 32 Programm auf einem Linux 64 System? (Ein User meines Programms berichtete, es liefe nicht. Ist das grundsätzlich so oder hat er ein anderes Problem.)
Auf Mac OS müssen GUI Anwendungen die das carbon Widgetset unterstützen 32 Bit Anwendungen sein, für Cocoa 64 Bit, für Konsolenanwendungen ist das dort egal.
64 Bit Programme ermöglichen es vor allem größere Speicheradressen zu verwalten, bei 32 Bit bist du beschränkt (ich glaube bei schon 2 GB unter windows) Außerdem, AFAIK, sind 32 Bit programme mit 32 Bit Typen(Integer, Cardinal, Single) schneller, 64 Bit Anwendungen mit 64 Bit großen Typen(Int64, QWord, Double).
Außerdem, zumindest unter Windows, sind 64 bit Programme größer, der Unterschied kann schon so 1 MB oder so ausmachen
-
- Beiträge: 6914
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: 32 bit und 64 bit Programm als target - Fallstricke?
Somit währen also die Daten bei meinem Code inkompatibel, je nachdem ich 32 oder 64bit kompiliere.SizeInt und SizeUInt sind keine nativen Datentypen (die der Compiler kennt). Du kannst dir deren Deklaration im Quelltext ansehen.
Auf 32 Bit sind SizeInt und SizeUInt 32 Bit groß; auf 64 Bit-Systemen je 64 Bit.
Da wäre in meinem Fall Int32 besser, der ist immer 32Bit gross.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot