Как установить команду загрузчика DYLD, которая явно не поддерживается ld?

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

Вы можете увидеть полный список команд загрузчика для любого двоичного файла в вашей системе, выполнив команду "otool -l /path/to/your/app".

Вообще говоря, эти команды загрузчика устанавливаются инструментом "ld" во время фазы соединения при компиляции проекта.

Мой вопрос в том, что мне нужно сделать, чтобы добавить команды загрузчика для публичных типов, которые не поддерживаются (по всей видимости) ld?

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

Я не вижу никакого аргумента для ld, который бы способствовал этому. Что-то вроде "-sectcreate", но для конкретного добавления в содержимое команд загрузчика, вот что мне нужно.

Я знаю, что это возможно, потому что по крайней мере одно стандартное приложение на Mac OS X использует это: Safari. Но я не знаю, достигают ли они этого каким-то массажем бинарного файла после ссылки, используют ли они пользовательскую версию ld, которая знает, как собрать и подключить пользовательскую команду загрузчика, или они используют общую функцию команды ld, которую я не смог разгадать.

10
задан Peter Hosey 18 November 2011 в 21:29
поделиться