В Mac OS X двоичные исполняемые файлы в формате DYLD содержат "команды загрузчика", которые указывают системе загрузки библиотек, как обрабатывать содержимое файла. В частности, команда загрузчика указывает системе, где следует искать зависимые библиотеки и т.д.
Вы можете увидеть полный список команд загрузчика для любого двоичного файла в вашей системе, выполнив команду "otool -l /path/to/your/app".
Вообще говоря, эти команды загрузчика устанавливаются инструментом "ld" во время фазы соединения при компиляции проекта.
Мой вопрос в том, что мне нужно сделать, чтобы добавить команды загрузчика для публичных типов, которые не поддерживаются (по всей видимости) ld?
В частности, я хотел бы воспользоваться командой загрузчика LC_DYLD_ENVIRONMENT, которая может быть использована для указания строки в таблице команд загрузчика бинарного файла, которая должна быть загружена и оценена как параметры переменной окружения в контексте исполняемого файла.
Я не вижу никакого аргумента для ld, который бы способствовал этому. Что-то вроде "-sectcreate", но для конкретного добавления в содержимое команд загрузчика, вот что мне нужно.
Я знаю, что это возможно, потому что по крайней мере одно стандартное приложение на Mac OS X использует это: Safari. Но я не знаю, достигают ли они этого каким-то массажем бинарного файла после ссылки, используют ли они пользовательскую версию ld, которая знает, как собрать и подключить пользовательскую команду загрузчика, или они используют общую функцию команды ld, которую я не смог разгадать.