Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Программирование и алгоритмические языки


Ulrich Drepper "Как писать разделяемые библиотеки"
Назад Оглавление Вперед

1.2. Переход к формату ELF

Для программистов главным преимуществом переключением на формат ELF было то, что стало очень просто создавать разделяемые библиотеки ELF или, если говорить на языке ELF, динамически разделяемые объекты DSO. Единственное различие между созданием приложения и объектом DSO заключалось в указании в командной строке последнего параметра. С помощью одного дополнительного параметра (--shared в случае использования GNU ld) компоновщику указывалось, что нужно создать объект DSO, а не приложение, которое создавалось по умолчанию. На самом деле объекты DSO были несколько большим, чем просто двоичный код специального вида; разница была в том, что у них не было фиксированных адресов загрузки и, следовательно, для того, чтобы они стали действительно исполняемыми, для них требовался динамический компоновщик. Если сравнивать с исполняемым кодом вида PIE (Position Independent Executable — исполняемый код, не зависящий от своего месторасположения), то различий стало еще меньше.

Это, вместе с началом использования GNU Libtool, о котором будет рассказано ниже, привело к широкому признанию среди программистов динамически разделяемых объектов DSO. Правильное использование объектов DSO может помочь сохранить много ресурсов. Но чтобы достичь какого-нибудь преимущества, нужно выполнить несколько правил, а если следовать еще некоторому количеству правил, то можно достичь оптимальных результатов. Объяснению этих правил будет посвящена большая часть настоящей статьи.

Не всегда объекты DSO используются с целью экономии ресурсов. Сегодня объекты DSO также часто используются в качестве способа структурирования программ. Отдельные части программы помещаются в различные объекты DSO. Этот подход может стать очень мощным средством, особенно на стадии разработки приложений. Вместо перекомпоновки всей программы, достаточно перекомпоновать те объекты DSO, которые были изменены. Часто это делается гораздо быстрее.

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

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


Предыдущий раздел:   Следующий раздел:
Назад Оглавление Вперед