Frage

ich Schwierigkeiten haben, das Verständnis der gcc-Compiler von OSX 10.6 Snow Leopard zur Verfügung gestellt, vor allem wegen meiner mangelnden Erfahrung mit 64-Bit-Umgebungen.

$ cat >foo.c
main() {}
$ gcc foo.c -o foo
$ file foo
foo: Mach-O 64-bit executable x86_64
$ lipo -detailed_info foo
input file foo is not a fat file
Non-fat file: foo is architecture: x86_64

Aber meine Architektur ist als ein Intel i386 Typ gesehen (ich habe eine des neuesten Intel Core 2 Duo MacBook)

$ arch
i386

und die Compiler Ziele i686-apple-darwin10

$ gcc --version 
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646)

Natürlich, wenn ich 32 Bit kompilieren bekomme ich eine 32-Bit-ausführbare Datei.

$ gcc -m32 foo.c -o foo
$ file foo
foo: Mach-O executable i386

, aber ich habe nicht das große Bild. Die Standardeinstellungen für den Compiler ist x86_64 ausführbare Dateien zu erzeugen, auch wenn ich Bogen haben sagen, dass ich eine 32-Bit-Maschine haben (warum Core2 ist 64?); selbst wenn (ich glaube) ich einen 32-Bit-Kernel leite; auch wenn ich einen Compiler der i686-apple-darwin Plattform-Targeting. Warum? Wie können sie laufen? Soll ich 64 kompilieren oder 32?

Diese Frage ist mein Versuch, aufgrund gcc 4.2.3 auf dem Mac zu kompilieren, aber ich bin ein paar Probleme mit gmp, mpfr und libiberty bekommen (in einigen Fällen) zusammengestellt für x86_64 mit. Soll ich alles x86_64 kompilieren? Wenn ja, was ist das Ziel (nicht i686-Apfel-darwin10 glaube ich)?

Danke für die Hilfe

War es hilfreich?

Lösung

Der Standard-Compiler auf Snow Leopard ist gcc4.2, und seine Standardarchitektur ist x86_64. Der typische Weg Mac-Software zu bauen, ist mehrere Architekturen in getrennten Durchgängen zu bauen, dann Lipo die Ergebnisse zu kombinieren, verwenden. (Lipo kompiliert nur Single-Bogen-Dateien in eine Mehrbogen-Datei oder Streifen Biegen aus einer Multi-Arch-Datei. Es hat keinen Nutzen auf Single-Bogen-Dateien, wie Sie entdeckt.)

Die Bitness des Compilers hat nichts damit zu tun. Sie können 32-Bit-Binärdateien mit einem 64-Bit-Compiler und vice versa bauen. (Was Sie denken, ist das „Ziel“ des Compilers ist eigentlich seine ausführbare Datei, die anders ist.)

Die Bitness des Kernels hat nichts damit zu tun. Sie können 64-Bit-Binärdateien erstellen und ausführen, wenn sie auf einem 32-Bit-Kernel geladen, und umgekehrt.

Was zählt, ist, wenn Sie verknüpfen, ob Sie die entsprechenden Architekturen für die Verknüpfung haben. Sie können keine Verbindung 32-Bit baut gegen 64-Bit-Binärdateien oder vice versa. Also das Wichtigste ist, zu sehen, was die Architekturen Ihrer Link-Bibliotheken sind, stellen Sie sicher, dass sie kohärent sind, dann binäre von derselben Architektur bauen, so dass Sie gegen die Bibliotheken verknüpfen können Sie haben.

Andere Tipps

i686-Apfel-darwin10.0.0 enthält einen x86_64-Ordner, die nicht von den meisten Versionen von Autotool verstanden wird. Ich würde sagen, mit anderen Worten, dass der gcc-Compiler ist leider nichts Geringeres als ein Witz auf Snow Leopard. Warum würden Sie bündeln 32-Bit- und 64-Bit-Bibliotheken in i686-Apfel-darwin10.0.0 über mich.

$ ls /usr/lib/gcc
i686-apple-darwin10 powerpc-apple-darwin10

Sie müssen sich ändern alle Ihre Dateien konfigurieren Autotools in * 86- darwin Verzeichnisse und dann der Suche nach 64-Bit-Bibliotheken zu behandeln suchen Ich kann mir vorstellen würde.

Wie bei dem System, mein Mac mini sagt seine i386, obwohl seine offensichtlich eine 64-Bit-Plattform, wieder ein anderer Fehler seit seiner verteilt mit 64-Bit-Hardware.

$arch
i386

Apple-Werkzeugketten unterstützen mehrere Architekturen. Wenn Sie eine Fett binäre erstellen möchten, die x86 und x86_64-Code enthält, dann müssen Sie die Parameter -arch i386 -arch x86_64 zu gcc übergeben. Der Compiler Code zweimal für beide Plattformen in einem Rutsch kompilieren.

Hinzufügen -arch i386 -arch x86_64 zu CFLAGS kann Ihnen erlauben, gmp, mpfr, und so weiter für mehrere Bögen in einem Rutsch zu kompilieren. Der Aufbau libusb auf diese Weise für mich gearbeitet.

Diese Antwort ist falsch, aber siehe Kommentare unten

Die eigentliche Frage ist ... wie Sie eine 32-Bit-Version von OSX gekommen? Ich war nicht bewusst, dass Snow Leopard had eine 32-Bit-Version, wie alle Apple Intel-Chips sind Core 2 oder Xeon, die die x86_64-Architektur unterstützen.

Oh, und Snow Leopard funktioniert nur auf Intel-Chips.

Edit:. Anscheinend Snow Leopard startet in 32-Bit-Modus

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top