2012-10-26 6 views
13

Po zmęczeniu się licznymi błędami łącznika Match-O, chcę wiedzieć, że to oznacza. Zamiast rozwiązania prób i błędów chciałbym poznać koncepcję stojącą za tymi rzeczami. W szczególności chcę znać różnicę między:W ustawieniach układu docelowego projektu Xcode: Co to jest typ Mach-O?

  1. Executable
  2. biblioteki dynamicznej
  3. Bundle
  4. Static Library
  5. relocatable Object File

Są opcje pokazane po kliknięciu na temat ustawień Mach-O w sekcji Łączenie. Pewna mała definicja lub jakiś link do odpowiedniej treści też jest w porządku.

+3

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

Odpowiedz

22

Mach-O, skrót od formatu pliku Mach, jest formatem plików wykonywalnych, kodu obiektowego, bibliotek współdzielonych, kodu ładowanego dynamicznie i zrzutów rdzenia. Dla użytkowników systemu UNIX jest to podobne do a.out, ale z ulepszeniami. Jest to format używany w bibliotekach Mac OS X i iPhone OS dla plików wykonywalnych.

Jak wiadomo urządzenia iOS (iPhone, iPad itp.) Mają różne architektury ARMv6 (iPhone 2G + 3G, iPod Touch) i ARMv7 (iPhone 3GS, iPod Touch 2G + 3G), ale symulatory używane w Xcode działają głównie na Platforma i386. Oznacza to, że klienci biblioteki muszą ustawić oddzielne cele dla symulatora i urządzenia. Oddzielne cele duplikują większość informacji i różnią się jedynie zawartymi w nich bibliotekami statycznymi. Więc jeśli otrzymujesz błąd łącznika Mach-O, oznacza to, że xcode ma problem z połączeniem z jedną z bibliotek dla tego urządzenia docelowego; w wyniku czego kompilacja nie powiedzie się.

Teraz Twoje definicje -

  1. wykonywalny - gotowy skompilowany maszyna ukierunkowany program do uruchomienia w formacie binarnym.
  2. Biblioteka dynamiczna - są połączone podczas wykonywania programu - program z odniesieniami do biblioteki dynamicznej zostanie załadowany i połączony z biblioteką podczas uruchamiania (lub na żądanie).
  3. Pakiety - i identyfikator pakietu pozwalają systemom iOS i OSX rozpoznawać wszelkie aktualizacje aplikacji. Daje to unikalną obecność w aplikacji.
  4. Biblioteka statyczna - pliki są połączone w czasie kompilacji. kod jest kopiowany do pliku wykonywalnego. Kod w bibliotece, do którego nie odwołuje się twój program, został usunięty. Program z tylko statycznymi bibliotekami nie ma żadnych zależności w czasie wykonywania.
  5. Plik obiektu do relokacji - to kolejne słowo dla biblioteki dynamicznej. Kiedy łączysz się z biblioteką dynamiczną, adresy zawartych w niej funkcji są obliczane na podstawie miejsca, w którym biblioteka jest załadowana do pamięci. Są "relokowalne", ponieważ adresy zawartych funkcji nie są określone w czasie połączenia. (W statycznej biblioteki, adresy są obliczane w czasie połączenia.)
+0

Szukam porady na podobny temat i nie wiem, jak się z tobą skontaktować. Chętnie opublikuję pytanie na twoją prośbę. – Patricia

+0

Czy jesteś pewien, że "Plik obiektu do relokacji" jest kolejnym słowem dla biblioteki dynamicznej? AFAIK, to plik obiektowy (który jest połączony statycznie, gdy jest używany - to jest kolejna forma statycznej biblioteki statycznej). Podczas gdy biblioteki statyczne zawierają wiele obiektów, relokowalny plik obiektowy jest pojedynczym obiektem. – Krypton

+0

Myślę, że to nie to samo, co plik obiektu relokowalny ELF. Czy ktoś może dwukrotnie sprawdzić? – Krypton