Ich habe eine C-Anwendung, die ich für Mac OS X 10.6.4 kompilieren möchte:
%Vor% Mein gcc
ist wie folgt:
Mein Makefile
ist wie folgt:
Das Problem besteht darin, dass meine Anwendung Aufrufe an fseeko64
und fopen64
aufruft und den Typ off64_t
für Offsets verwendet. Wenn ich meine Anwendung kompiliere, bekomme ich die folgenden Warnungen und Fehler:
Mein Code baut unter Linux fehlerfrei auf. Welche Änderungen kann ich an den Quellcode vornehmen, um große Dateiunterstützung beim Erstellen unter Darwin hinzuzufügen?
Während diese Frage eine angenommene, akzeptierte Antwort hat, die funktioniert, denke ich, dass die Lösung ein bisschen irreführend ist. Anstatt etwas zu reparieren, ist es immer besser zu vermeiden, es später reparieren zu müssen. .
Zum Beispiel für die Funktion fopen64
die GNU C Library Dokumente sagen:
Wenn die Quellen mit
_FILE_OFFSET_BITS == 64
auf einer 32-Bit-Maschine kompiliert werden, ist diese Funktion unter dem Namenfopen
verfügbar und ersetzt so transparent die alte Schnittstelle .
Sie können einfach dieselbe Funktion fopen
auf Systemen verwenden, die standardmäßig 64-Bit-E / A unterstützen, und Sie können das _FILE_OFFSET_BITS=64
-Flag auf 32-Bit setzen, ohne dass Sie überhaupt Neudefinitionen schreiben müssen. Das gleiche gilt für Typen wie off64_t
vs. off_t
.
Speichern Sie die Neudefinitionen für den Fall, wenn Sie mit Quellen von Drittanbietern umgehen und Standardfunktionen in Ihrem eigenen Code verwenden müssen.
Die fseeko und ähnliche Befehle arbeiten mit großer Dateiunterstützung, so dass fseeko64 nicht benötigt wird usw. Apple man page