Domanda

Non ho difficoltà a capire il compilatore gcc fornito da OSX 10.6 Snow Leopard, soprattutto a causa della mia mancanza di esperienza con gli ambienti a 64 bit.

$ 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

Tuttavia, la mia architettura è vista come un tipo di intel i386 (ho uno dei più recenti Intel Core2 Duo MacBook)

$ arch
i386

e gli obiettivi del compilatore i686-apple-darwin10

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

Naturalmente, se compilo 32 bit ottengo un eseguibile a 32 bit.

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

, ma non capisco il quadro generale. L'impostazione di default per il compilatore è quello di produrre eseguibili x86_64, anche se ho arco dire ho una macchina a 32 bit (perché Core2 è 64?); anche se (credo) Sto facendo funzionare un kernel a 32 bit; anche se ho un compilatore mira la piattaforma i686-apple-Darwin. Perché? Come possono funzionare? Devo compilare 64 o 32?

Questa domanda è dovuto al mio tentativo di compilare GCC 4.2.3 su Mac, ma sto avendo un po 'di problemi con gmp, MPFR e libiberty ottenendo (in alcuni casi) compilato per x86_64. Devo compilare tutto x86_64? Se è così, qual è il bersaglio (non i686-apple-darwin10 immagino)?

Grazie per l'aiuto

È stato utile?

Soluzione

Il compilatore di default su Snow Leopard è gcc4.2, e la sua architettura di default è x86_64. Il modo tipico per costruire il software Mac è quello di costruire architetture multiple in passaggi separati, quindi utilizzare lipo per combinare i risultati. (Lipo compila solo i file singolo arco in un file di più arco, o strisce di archi da un file a più arch. Non ha utilità su singoli file-arco, come hai scoperto.)

Il numero di bit del compilatore non ha nulla a che fare con qualsiasi cosa. È possibile costruire i binari a 32 bit con un compilatore a 64 bit, e viceversa. (Che cosa pensi sia il "target" del compilatore è in realtà il suo eseguibile, che è diverso.)

Il numero di bit del kernel non ha nulla a che fare con qualsiasi cosa. È possibile costruire ed eseguire file binari a 64 bit quando avviato su un kernel a 32 bit, e viceversa.

Ciò che conta è quando si collega, se si dispone le architetture appropriate per il collegamento. Non è possibile collegare a 32 bit costruisce contro i binari a 64 bit o viceversa. Quindi la cosa importante è vedere quali sono le architetture delle vostre librerie di collegamento sono, assicurarsi che stanno coerenti, quindi creare il binario della stessa architettura in modo da poter collegare contro le librerie che avete.

Altri suggerimenti

i686-apple-darwin10.0.0 contiene una cartella x86_64 che non è compreso dalla maggior parte delle versioni di autotools. In altre parole, direi che il compilatore gcc è, purtroppo, a dir poco una battuta su Snow Leopard. Perché si impacchettare librerie a 32-bit e 64-bit in i686-apple-darwin10.0.0 è oltre me.

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

È necessario modificare tutti i vostri autotools configurare i file da gestire cercando in * 86- Darwin directory e quindi alla ricerca di librerie a 64 bit mi immagino.

Come per il sistema, il mio mac mini dice il suo i386, anche se la sua, ovviamente utilizzando una piattaforma a 64 bit, ancora una volta un altro errore dalla sua distribuito con hardware a 64 bit.

$arch
i386

toolchain di Apple supportano più architetture. Se si desidera creare un binario grasso che contiene x86 e x86_64 codice, poi si deve passare il -arch i386 -arch x86_64 parametri da gcc. Il compilatore compilare il codice due volte per entrambe le piattaforme in una sola volta.

L'aggiunta di -arch i386 -arch x86_64 a CFLAGS può consentire di compilare gmp, MPFR, e quant'altro per più archi in una sola volta. Costruire libusb in questo modo ha funzionato per me.

Questa risposta è sbagliata, ma vedere i commenti qui sotto

La vera domanda è ... come hai fatto a ottenere una versione a 32 bit di OSX? Non ero consapevole del fatto che Snow Leopard had di una versione a 32 bit, come tutti i chip Intel di Apple sono Core 2 o Xeon, che supportano l'architettura x86_64.

Oh, e Snow Leopard funziona solo su chip Intel.

Modifica:. A quanto pare Snow Leopard si avvia in modalità a 32 bit

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top