2011-12-14 12 views
5

Poiché Apple non supporta GCC 4.6 o GCC 4.7, ho appena passato alla versione di GCC 4.6/4.7 di MacPorts. Tuttavia, ho avuto un problema nel creare il mio codice nell'architettura "universale".Posso compilare il codice universale usando GCC di Macports?

Tradizionalmente, vorrei fare g++ -arch i386 -arch x86_64 ... per compilare il mio binario almeno per l'architettura i386/x86_64. Ho fatto qualche ricerca e mi sono reso conto che l'opzione -arch è supportata solo dai compilatori di Apple. Quindi ovviamente non ha funzionato con Macports '. Il meglio che potrei fare è usare le opzioni -m32/-m64 per specificare un'architettura che voglio. Tuttavia, questo produrrà solo un eitherr binario in formato i386 o x86_64. Quello che voglio veramente è ottenere un file binario in entrambe le architetture (Universal) come è stato fatto con i compilatori GCC originali.

Non è supportato o è un problema noto? Ho provato tutta la notte a cercare risposte su Google, ma non ho trovato nulla di utile. Quindi inizio a dubitare che se solo io abbia avuto questo problema e mi sia sfuggito qualcosa di veramente importante per farlo funzionare? Apprezzo davvero se qualcuno può darmi qualche suggerimento.

BTW. Ho installato le varianti gcc46 +universal, ma non ha prodotto nulla di veramente universale tranne la compilazione di file binari separati per ogni architettura.

Xing.

risposta

3

È possibile combinare file binari con architetture diverse in un unico universale utilizzando lipo.

+0

Grazie che funziona. Non sapevo che ci fosse lipo, immagino che tutto ciò di cui ho veramente bisogno sia lipo. Ho bisogno di cambiare alcuni dei miei Makefile per fermare le bandiere arco e usare lipo per produrre il codice universale ora :) –

6

Oh, ho appena avuto questo problema e ci ho dedicato molto tempo. Si scopre che la versione Apple di GCC 4.2.1 è in realtà solo un wrapper che onora alcuni flag (in particolare il flag -arch) e quindi usa lipo per reinserire i file oggetto in un oggetto fat. Ho modificato questo driver un po 'in modo da avvolgere MacCC GCC mentre ancora rispettavo il flag -arch e produrre file di oggetti multi-arch (per Intel intel 32 bit e 64 bit).

Ho appena pubblicato un abbastanza estesa di scrittura su come fare questo:

http://thecoderslife.blogspot.com/2015/07/building-with-gcc-46-and-xcode-4.html