Interested Article - Компоновщик
- 2021-02-26
- 2
Компоновщик (также редактор связей , от англ. link editor, linker ) — инструментальная программа , которая производит компоновку ( «линковку» ): принимает на вход один или несколько объектных модулей и собирает из них исполняемый или библиотечный файл-модуль.
Изначально, до появления динамических библиотек , загрузчики могли выполнять некоторые функции компоновщика , однако сейчас, чаще всего, загрузка программ выделяется в отдельный процесс .
Для связывания модулей компоновщик использует таблицы символов , созданные компилятором в каждом из объектных модулей . Эти таблицы могут содержать символы следующих типов:
- Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям;
- Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя;
- Локальные — могут использоваться внутри объектного файла для упрощения процесса .
Для большинства компиляторов один объектный файл является результатом компиляции одного файла с исходным кодом . Если программа собирается из нескольких объектных файлов, компоновщик собирает эти файлы в единый исполняемый файл, вычисляя и подставляя адреса вместо символов, в течение времени компоновки (статическая компоновка) или во время исполнения (динамическая компоновка).
Компоновщик может извлекать объектные файлы из специальных коллекций , называемых библиотеками . Если не все символы, на которые ссылаются пользовательские объектные файлы, определены, то компоновщик ищет их определения в библиотеках, которые пользователь подал ему на вход. Обычно одна или несколько системных библиотек используются компоновщиком по умолчанию. Когда объектный файл, в котором содержится определение какого-либо искомого символа, найден, компоновщик может включить его (файл) в исполняемый файл (в случае статической компоновки) или отложить это до момента запуска программы (в случае динамической компоновки).
Работа компоновщика заключается в том, чтобы в каждом модуле определить и связать ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес .
Компоновщик обычно не выполняет проверку типов и количества параметров процедур и функций. Если надо объединить объектные модули программ, написанные на языках со строгой типизацией, то необходимые проверки должны быть выполнены дополнительной утилитой перед запуском редактора связей.
См. также
Примечания
- John R. Levine. Linkers and Loaders. — 1999. — С. 1 .
- IBM Corporation. (неопр.) . — 1972. 6 марта 2020 года.
Литература
- David William Barron, Assemblers and Loaders. 1972, Elsevier.
- John R. Levine, — Morgan-Kauffman, 1999, — ISBN 1-55860-496-0
- David Salomon, Assemblers and Loaders. 1993 Chapter 7 Loaders
- // Linux Journal
- 2021-02-26
- 2