Создание мужественных файлов

Для создания программ разработчики преобразовывают исходный код в объектные файлы. Объектные файлы тогда упаковываются в исполняемый код или статические библиотеки. OS X включает инструменты для преобразования исходного кода в запущенное приложение или совместно используемую библиотеку, которой могут пользоваться одно или более приложений.

Эта статья свободно описывает, как создаются приложения Mac, и обсуждает, подробно, типы программ, которые можно создать. Это описывает инструменты, вовлеченные в Мужественный процесс сборки файла, объясняют типы Мужественных файлов, которые Вы можете создать и говорите о модулях, которые являются самым маленьким связываемым модулем кода и данных в среде выполнения OS X. Это также описывает статические архивные библиотеки, которые являются файлами тот пакет ряд модулей.

Инструменты — создание и петляние

Для выполнения работы фактической загрузки и привязки программы во время выполнения ядро использует динамического компоновщика (специально отмеченная динамическая совместно используемая библиотека, расположенная в /usr/lib/dyld). Ядро загружает программу и динамического компоновщика в новый процесс и выполняет их.

Всюду по этому документу следующие инструменты обсуждены абстрактно:

Инструменты XCode CD содержат несколько инструментов командной строки (к которому относится этот документ коллективно как стандартные инструменты) для создания и анализа Вашего приложения, включая компиляторы и ld, типичный статический компоновщик. Используете ли Вы приложение XCode, стандартные инструменты командной строки или сторонний комплект инструментальных средств для разработки приложения, понимая, что роль каждого из следующих инструментов может улучшить понимание Мужественной архитектуры среды выполнения и упростить коммуникацию об этих темах с другими разработчиками OS X. Стандартные инструменты включают следующее:

Инструменты для анализа Мужественных файлов включают следующее:

Продукты — типы мужественных файлов можно создать

В OS X типовое приложение выполняет код, происходящий из многих типов файлов. Основной исполняемый файл обычно содержит логику ядра программы, включая точку входа main функция. Основная функциональность программы обычно реализуется в коде основного исполняемого файла. Посмотрите Выполняющиеся Мужественные Файлы для подробных данных. Другие файлы, содержащие исполняемый код, включают:

Для функционирования должным образом в OS X все объектные файлы кроме расширений ядра должны быть динамично связаны — т.е. созданы с кодом, позволяющим динамические ссылки на совместно используемые библиотеки.

По умолчанию статический компоновщик ищет платформы и платформы зонтика в /System/Library/Frameworks и для совместно используемых библиотек и статических архивных библиотек в /usr/lib. Пакеты обычно располагаются в Resources каталог пакета приложений. Однако можно указать путь для различного расположения во время ссылки (и, в целях разработки, во время выполнения также).

Модули — самый маленький модуль кода

На высшем уровне можно просмотреть совместно использованную библиотеку OS X как набор модулей. Модуль является самым маленьким модулем машинного кода и данных, которые могут быть соединены независимо от других модулей кода. Обычно, модуль является объектным файлом, сгенерированным путем компиляции единственного исходного файла C. Например, учитывая исходные файлы main.c, thing.c, и foo.c, компилятор мог бы генерировать объектные файлы main.o, thing.o, и foo.o. Каждый из этих выходных объектных файлов является одним модулем. Когда статический компоновщик используется для объединения всех трех файлов в динамическую совместно используемую библиотеку, каждый из объектных файлов сохраняется как отдельный модуль кода и данных. При соединении приложений и пакетов, статический компоновщик всегда комбинирует все объектные файлы в один модуль.

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

ld -r -o things.o thing1.o thing2.o thing3.o

XCode выполняет эту оптимизацию по умолчанию.

Статические архивные библиотеки

Для группировки ряда модулей можно пользоваться статической архивной библиотекой, которая является архивным файлом с записью оглавления. Формат - используемый ar команда. Можно использовать libtool команда для создания статической архивной библиотеки, и можно использовать ar команда для управления отдельными модулями в библиотеке.

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

Несмотря на то, что ar архив может содержать любой тип файла, типичная цель состоит в том, чтобы собрать в группу несколько объектных файлов с оглавлением, формируя статическую архивную библиотеку. Статический компоновщик может соединить объектные файлы, хранившие в статической архивной библиотеке в Мужественную исполнимую или динамическую библиотеку. Обратите внимание на то, что необходимо использовать libtool команда для создания статического оглавления библиотеки перед архивом может использоваться в качестве статической архивной библиотеки.

ar формат архивного файла описан в OS X ABI Мужественная Ссылка Формата файла.

Со стандартными инструментами можно передать -static опция к libtool создать статическую архивную библиотеку. Следующая команда создает статическую архивную названную библиотеку libthing.a от ряда промежуточных объектных файлов, thing1.o и thing2.o:

libtool -static thing1.o thing2 -o libthing.a

Обратите внимание на то, что, если Вы не передаете ни одного -static ни -dynamic, libtool принимает -static. Это, однако, считают хорошим стилем для явной передачи -static при создании статических архивных библиотек.

Для получения дополнительной информации посмотрите libtool и ar страницы справочника.