2015-09-21 3 views
0

Ссылаясь на этот ответ: https://stackoverflow.com/a/6264256/5324086, Я обнаружил, что компоновщик обладает еще большей функциональностью, чем просто управление абсолютными адресами для символов объектных файлов.Как компоновщик создает библиотеку? Каково содержимое этой библиотеки?

В чем состоит библиотека, созданная компоновщиком? Это что-то другое, чем ... скажем, библиотека C Standard?

Почему линкеру даже требуется создать библиотеку?

+0

Мы говорим о статических или динамических библиотеках? –

ответ

0

Статические библиотеки - это всего лишь коллекция объектных файлов. Вы можете представить их как tar-файл, содержащий все соответствующие файлы .a (или в Windows, как zip-файл, содержащий файлы obj). Здесь не задействована связующая часть компоновщика (в действительности традиционно статические библиотеки в системах Unix выполняются с помощью утилиты ar, которая как-то связана с tar). Они полностью разрешены во время компиляции, и они просто используются как способ избежать пересоздания всего времени, которое требуется для создания или выполнения сложных процедур сборки.

Динамические библиотеки - это разные зверь. Они представляют собой полноценные исполняемые файлы, которые могут быть загружены другими процессами, поэтому регулярный компоновщик необходим по тем же причинам, что и в обычных исполняемых файлах. Вместо предоставления только одной точки входа они экспортируют полную таблицу символов, которая используется загрузчиком (или «компоновщик времени выполнения»), чтобы хост-программа могла найти необходимые процедуры. Как правило, они также содержат информацию о перемещении, чтобы разрешить загрузку по любому адресу в целевом адресном пространстве (или они скомпилированы в независимый от позиции код по этой же причине).

+0

Что вы подразумеваете под «единственной точкой входа»? «основной» метод? – Spandan

+0

@Spandan: точно. Обратите внимание, что также библиотеки обычно предоставляют основную функцию, вызываемую загрузчиком, когда они загружаются в процесс и когда они выгружаются. –

3

Точные данные зависят от типа библиотеки (вы можете искать общие библиотеки), но основные компоненты будут включать скомпилированный код плюс таблицу символов, которая сообщает компоновщику, какой адрес соответствует каждому имени. Обратите внимание, что это очень похоже на объектный файл. Статические библиотеки - это в основном архивы объектных файлов, и компилятор связывает их аналогичным образом. С динамическими библиотеками ОС может выглядеть так, всякий раз, когда загружает программу, а затем связывает символы. Они обычно не имеют одинаковых абсолютных адресов в адресном пространстве каждой программы, поэтому эти адреса будут относиться к тому, где ОС загружает библиотеку.

Стандартная библиотека C (среда выполнения MSVC в Windows) является примером библиотеки.

Смежные вопросы