Динамическая информация о версии загрузчика
Динамический загрузчик для ДАРВИНА/OS X вызывают dyld, и это ответственно за загрузку всех платформ, динамических библиотек и пакетов (плагины), необходимые процессу.
Содержание:
Новые Функции в OS X v10.6
Этот раздел содержит функции OS X динамического загрузчика v10.6, представляет.
Новый сжатый LINKEDIT Формат сегмента
Традиционный формат LINKEDIT сегмент моделируется на записях таблицы символов и перемещениях, создаваемых ассемблером при создании объектных файлов. Этот формат не идеален для динамического загрузчика для обработки во время выполнения: Это является большим и имеет мало местности. OS X v10.6 представляет новый формат для данных динамические потребности загрузчика от LINKEDIT сегмент. Процесс может содержать Мужественные изображения в обоих новый формат или традиционный формат. Динамический загрузчик позволяет смешиваться форматов, но использует новый формат, когда доступно.
Новый формат описан LC_DYLD_INFO команда загрузки. Это имеет пять блоков: перебазирование, привязка, слабая привязка, ленивая привязка и экспортируемые символы. Формат описан в <mach-o/loader.h>. Инструмент командной строки dyldinfo(1) может использоваться для отображения той информации.
При создании продукта, предназначенного для OS X v10.6, компоновщик, ld, создает Мужественные-O изображения, содержащие только новое LINKEDIT формат; эти программы не работают на OS X v10.5 и ранее. При предназначении для OS X v10.5, компоновщик создает изображения, содержащие и новое и традиционное LINKEDIT формат сегмента; эта практика позволяет программам работать на OS X v10.5 и работать очень эффективно на OS X v10.6. (При предназначении для OS X v10.4 или ранее, компоновщик производит только традиционный формат.)
Более быстрое объединение слабого символа
C++ использует слабые определения для решения многих проблем. Но если слабые символы не скрыты, динамический загрузчик должен сделать их уникальными во время выполнения. Предыдущий алгоритм для того, чтобы сделать, который был дорогим. Для каждого слабого символа в каждом изображении динамический загрузчик искал бы тот символ в любом изображении. В OS X v10.6 алгоритм более эффективно: Это предполагает, что копии слабого символа редки. Во-первых, все символы связываются их нормальной двухуровневой привязкой пространства имен. Тогда существует как отдельная передача, берущая расположенный в алфавитном порядке список слабых символов от каждого изображения и выполняющая итерации через просто те слабые символы, ища копии. Динамический загрузчик обновляет только копии. Новое LINKEDIT формат сегмента оптимизирован для этого алгоритма.
Новый dlsym Дескриптор
Существует новый псевдо дескриптор, которому можно передать dlsym вызванный RTLD_MAIN_ONLY. Это говорит динамическому загрузчику искать символ только в основной исполнимой программе.
Изменение в update_dyld_shared_cache Инструмент командной строки
Этот инструмент создает совместно использованный кэш динамического загрузчика, улучшающий производительность запуска. В OS X v10.5, динамический загрузчик автоматически запустил бы его, если бы казалось, что совместно используемый кэш устарел. В OS X v10.6, update_dyld_shared_cache(1) автоматически не выполняется. Установщик выполняет его при первой установке операционной системы; Обновление программного обеспечения выполняет его, когда это обновляет операционную систему. По некоторым причинам при выгрузке системы динамическая библиотека необходимо вручную работать update_dyld_shared_cache.
Перезапуск компьютера в Безопасном Режиме начальной загрузки удаляет совместно использованный кэш динамического загрузчика.
Если Вы подозреваете, что совместно используемый кэш так или иначе поврежден, можно работать:
sudo update_dyld_shared_cache -verify |
который воссоздает кэш и сравнивает результат с Вашим фактическим файлом кэша.
Время запуска программ Какао было улучшено путем кэширования некоторого Objective C взлеты фиксации во время выполнения в совместно используемом кэше. Таким образом время выполнения Objective C имеет меньше работы, чтобы сделать во время запуска.
Исправления ошибок
Осуждаемый APIs
Большая часть API в
<mach-o/loader.h>был осужден в OS X v10.5. Межплатформенный API в<dlfcn.h>предпочтительная замена.
Известные проблемы
Безопасная Начальная загрузка удаляет совместно использованный кэш динамического загрузчика, и это автоматически никогда не воссоздается.
Совместно используемый кэш быть воссозданным в следующий раз, когда Обновление программного обеспечения сделано, или можно обновить его вручную, как описано в Изменении в update_dyld_shared_cache Инструменте Командной строки.
Никакая быстрая локальная память потока.
pthread_getspecific(3)в настоящее время единственная опция.Нет
dl*способ загрузить память базировал Мужественные изображения.NSCreateObjectFileFromMemoryосуждается. Некоторые программы дешифруют или синтезируют Мужественные файлы в памяти. Должен быть adl*основанный API, который может использовать Мужественный файл, существующий только в памяти а не на диске.MH_BINDATLOADпроигнорированныйВо время изготовления
ldопция-bind_at_loadнаборыMH_BINDATLOADбит вmach_headerиmach_header_64флаги. Но во время выполнения динамический загрузчик не проверяет наMH_BINDATLOADбит. (В OS X v10.3 и ранее, этот флаг обычно использовался в качестве обходного решения для выполнения инициализаторов правильно, который не необходим в OS X v10.4 и позже.)
Copyright © 2015 Apple Inc Все права защищены. Условия использования | Политика конфиденциальности | обновленный: 01.07.2009