2012-10-26 9 views
13

Dopo essermi stancato di numerosi errori di linker Match-O, voglio sapere che questa cosa significa. Invece di una soluzione per tentativi ed errori, mi piacerebbe conoscere il concetto alla base di queste cose. In particolare vorrei sapere la differenza tra:Nelle impostazioni di costruzione del target del progetto Xcode, che cos'è il tipo Mach-O?

  1. eseguibile
  2. libreria dinamica
  3. Bundle
  4. Static Library
  5. rilocabile File oggetto

Queste sono le opzioni presentate quando clicco su Mach-O Type settings sulla sezione Linking. Qualche piccola definizione o qualche link al contenuto appropriato va bene anch'esso.

+3

https: // developer.apple.com/library/mac/#documentation/developertools/conceptual/MachOTopics/1-Articles/building_files.html – iDev

risposta

22

Mach-O, abbreviazione di formato file oggetto Mach, è un formato file per file eseguibili, codice oggetto, librerie condivise, codice caricato dinamicamente e core dump. Per utenti unix questo è come a.out ma con miglioramenti. Questo è il formato utilizzato nelle librerie del sistema operativo Mac OS X e iPhone per i file eseguibili.

Come sapete, i dispositivi iOS (iPhone, iPad ecc.) Hanno diverse architetture ARMv6 (iPhone 2G + 3G, iPod Touch) e ARMv7 (iPhone 3GS, iPod Touch 2G + 3G) ma i simulatori utilizzati in Xcode funzionano principalmente su piattaforma i386. Ciò significa che i client della libreria devono impostare obiettivi separati per il simulatore e il dispositivo. Gli obiettivi separati duplicano la maggior parte delle informazioni e differiscono solo nelle librerie statiche incluse. Quindi, se si ottiene un errore del linker Mach-O, ciò significa che xcode ha problemi a collegarsi a una delle librerie per quel dispositivo di destinazione; come risultato della quale la compilazione fallisce.

Ora le tue definizioni -

  1. eseguibile - macchina compilato programma mirato pronto per essere eseguito in formato binario.
  2. Libreria dinamica - sono collegati durante il runtime - un programma con riferimenti a una libreria dinamica verrà caricato e collegato alla libreria all'avvio (o su richiesta).
  3. I bundle e l'identificativo del bundle consentono a iOS e OSX di riconoscere gli aggiornamenti della tua app. Dà una presenza unica nell'app.
  4. Libreria statica: i file sono collegati in fase di compilazione. il codice viene copiato nell'eseguibile. Il codice nella libreria a cui non fa riferimento il tuo programma viene rimosso. Un programma con solo librerie statiche non ha alcuna dipendenza durante il runtime.
  5. File oggetto rilocabile - è un'altra parola per una libreria dinamica. Quando si collega a una libreria dinamica, vengono calcolati gli indirizzi delle funzioni contenute all'interno, in base al punto in cui la libreria viene caricata in memoria. Sono "rilocabili" perché gli indirizzi delle funzioni contenute non sono determinati al momento del collegamento. (In una libreria statica, gli indirizzi vengono calcolati durante il tempo di collegamento.)
+0

Cerco il tuo consiglio su un argomento simile e non so come raggiungerti. Sarò felice di inviare una domanda sulla tua richiesta. – Patricia

+0

Sei sicuro che "Relocatable Object File" è un'altra parola per una libreria dinamica? AFAIK, è un file oggetto (che è collegato staticamente quando usato, quindi questa è un'altra forma di libreria statica statica). Mentre le librerie statiche contengono più oggetti, il file oggetto riposizionabile è un singolo oggetto. – Krypton

+0

Penso che non sia lo stesso del file oggetto rilocabile ELF. Qualcuno può ricontrollare? – Krypton

Problemi correlati