Линкер (вычисления)


В вычислительной технике компоновщик или редактор ссылок — это компьютерная системная программа , которая берет один или несколько объектных файлов ( сгенерированных компилятором или ассемблером ) и объединяет их в один исполняемый файл, файл библиотеки или другой «объектный» файл.

Более простая версия, которая записывает выходные данные непосредственно в память , называется загрузчиком , хотя загрузка обычно считается отдельным процессом. [1] [2]

Компьютерные программы обычно состоят из нескольких частей или модулей; эти части/модули не обязательно должны содержаться в одном объектном файле , и в таких случаях они ссылаются друг на друга посредством символов как адреса в другие модули, которые отображаются в адреса памяти при связывании для выполнения.

Хотя процесс связывания предназначен для окончательного объединения этих независимых частей, существует множество веских причин разрабатывать их отдельно на уровне исходного кода. Среди этих причин — простота организации нескольких более мелких частей в монолитное целое и возможность лучше определить назначение и обязанности каждой отдельной части, что важно для управления сложностью и повышения удобства сопровождения в долгосрочной перспективе в архитектуре программного обеспечения .

Для большинства компиляторов каждый объектный файл является результатом компиляции одного входного файла исходного кода. Когда программа состоит из нескольких объектных файлов, компоновщик объединяет эти файлы в единую исполняемую программу, разрешая символы по мере ее выполнения.

Линкеры могут брать объекты из коллекции, называемой библиотекой или библиотекой времени выполнения . Большинство компоновщиков не включают все объектные файлы статической библиотеки в выходной исполняемый файл; они включают только те объектные файлы из библиотеки, на которые прямо или косвенно ссылаются другие объектные файлы или библиотеки. Но для общей библиотеки вся библиотека должна быть загружена во время выполнения, поскольку неизвестно, какие функции или методы будут вызываться во время выполнения. Таким образом, связывание библиотек может быть итеративным процессом, при этом некоторые упомянутые модули требуют связывания дополнительных модулей и так далее. Библиотеки существуют для различных целей, и одна или несколько системных библиотек обычно подключаются по умолчанию.