Подтвердить что ты не робот

В настройках целевой сборки проекта Xcode, что такое тип Mach-O?

После усталости от ошибки компоновщика Match-O, я хочу знать, что это означает. Вместо решения проб и ошибок я хотел бы знать концепцию, стоящую за этими вещами. В частности, я хочу знать разницу между:

  • Исполняемые
  • Динамическая библиотека
  • Bundle
  • Статическая библиотека
  • Файл перемещаемого объекта

Это параметры, представленные при нажатии на параметры типа Mach-O в разделе "Связывание". Некоторое небольшое определение или некоторая ссылка на соответствующий контент тоже в порядке.

4b9b3361

Ответ 1

Mach-O, сокращенно для формата файла объектов Mach, является файловым форматом для исполняемых файлов, объектного кода, разделяемых библиотек, динамически загруженного кода, и дампы ядра. Для пользователей unix это похоже на a.out, но с улучшениями. Это формат, используемый в библиотеках ОС Mac OS X и iPhone для исполняемых файлов.

Как вы знаете, устройства iOS (iPhone, iPad и т.д.) имеют разные архитектуры ARMv6 (iPhone 2G + 3G, iPod Touch) и ARMv7 (iPhone 3GS, iPod Touch 2G + 3G), но симуляторы, используемые в Xcode, работают в основном на i386 Платформа. Это означает, что клиенты библиотеки должны настраивать отдельные цели для симулятора и устройства. Отдельные целевые объекты дублируют большую часть информации и отличаются только включенными статическими библиотеками. Поэтому, если вы получаете ошибку компоновщика Mach-O, это значит, что у xcode возникают проблемы с привязкой к одной из библиотек для этого целевого устройства; в результате чего сбой компиляции.

Теперь ваши определения -

  • Исполняемая - скомпилированная целевая программа, готовая к запуску в двоичном формате.
  • Динамическая библиотека - связаны во время выполнения - программа со ссылками на динамическую библиотеку загружается и связывается с библиотекой при ее запуске (или по требованию).
  • Связки - и идентификатор пакета позволяют iOS и OSX распознавать любые обновления вашего приложения. Это дает ему уникальное присутствие в приложении.
  • Статическая библиотека - файлы связаны во время сборки. код копируется в исполняемый файл. Код в библиотеке, на который не ссылается ваша программа, удаляется. Программа с только статическими библиотеками не имеет никаких зависимостей во время выполнения.
  • Relocatable Object File - это еще одно слово для динамической библиотеки. Когда вы связываетесь с динамической библиотекой, адреса функций, содержащихся внутри, вычисляются на основе того, где библиотека загружается в память. Они "перемещаются", потому что адреса содержащихся функций не определяются во время связи. (В статической библиотеке адреса вычисляются во время времени ссылки.)

Ответ 3

Framework target -> Build Settings -> Mach-O Type

Справка XCode имеет следующее описание

Тип Mach-O (MACH_O_TYPE)[Mach-O file]

Этот параметр определяет формат создаваемого двоичного файла и то, как он может быть связан при создании других двоичных файлов.

  • Исполняемый файл: mh_execute. Исполняемые файлы и автономные двоичные файлы и не могут быть связаны.

  • Динамическая библиотека: mh_dylib. Динамические библиотеки связаны во время сборки и загружаются автоматически при необходимости.

  • Пакет: mh_bundle. Библиотеки комплектов загружаются явно во время выполнения.

  • Статическая библиотека: staticlib. Статические библиотеки связаны во время сборки и загружаются во время выполнения.

  • Перемещаемый объектный файл: mh_object. Объектные файлы - это одномодульные файлы, которые связаны во время сборки.