Компоновщик: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
imported>YurikBot
м добавлена ссылка на Лексему d:Lexeme:L118914
 
imported>Alex NB OT
 
Строка 1: Строка 1:
= {{-ru-}} =
{{значения термина|Компоновка}}
{{Лексема в Викиданных|L118914}}
{{о|инструментальном средстве для сборки исполняемых программ|шаблоне проектирования|Компоновщик (шаблон проектирования)}}
'''Компоновщик''' (также ''редактор связей'', от {{lang-en|link editor, linker}}) — [[Инструментальное программное обеспечение|инструментальная программа]], которая производит '''''компоновку''''' (''«линковку»''): принимает на вход один или несколько [[объектный модуль|объектных модулей]] и собирает из них исполняемый или библиотечный файл-модуль.
[[Файл:Linker.svg|thumb|right|Общая схема процесса линковки. Из объектных файлов и статических библиотек собираются исполняемые файлы или новые статические или динамические библиотеки]]


=== Морфологические и синтаксические свойства ===
Изначально, до появления [[Динамически подключаемая библиотека|динамических библиотек]], [[Загрузчик программ|загрузчики]] могли выполнять некоторые функции компоновщика<ref>{{статья
{{сущ ru m ina 3a
|автор        = John R. Levine
|основа=компоно́вщик
|заглавие      = Linkers and Loaders
|слоги={{по-слогам|ком|по|но́в|щик}}
|ссылка        = <!--http://-->
}}
|год          = 1999
|страницы      = 1
}}</ref>, однако сейчас, чаще всего, загрузка программ выделяется в отдельный [[Процесс (информатика)|процесс]]<ref>{{книга |заглавие=IBM OS Linkage Editor and Loader |год=1972 |ссылка=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/GC28-6538-9_OS_Linkage_Editor_and_Loader_Release_21_Jan72.pdf |ref=IBM Corporation |язык= |автор=IBM Corporation |archivedate=2020-03-06 |archiveurl=https://web.archive.org/web/20200306230227/http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/GC28-6538-9_OS_Linkage_Editor_and_Loader_Release_21_Jan72.pdf }}</ref>.


{{морфо-ru|компон|-ов|-щик|и=т}}
Для связывания модулей компоновщик использует [[Таблица символов|таблицы символов]], созданные [[компилятор]]ом в каждом из [[Объектный модуль|объектных модулей]]. Эти таблицы могут содержать символы следующих типов:
* ''Определённые'' или ''экспортируемые'' имена — функции и переменные, определённые в данном [[Модуль (программирование)|модуле]] и предоставляемые для использования другим модулям;
* ''Неопределённые'' или ''импортируемые'' имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя;
* ''Локальные'' — могут использоваться внутри объектного файла для упрощения процесса ''{{нп5|Настройка адресов|настройки адресов|en|Relocation (computing)}}''.


=== Произношение ===
Для большинства компиляторов один объектный файл является результатом компиляции одного файла с [[Исходный код|исходным кодом]]. Если программа собирается из нескольких объектных файлов, компоновщик собирает эти файлы в единый исполняемый файл, вычисляя и подставляя [[Адрес (информатика)|адреса]] вместо символов, в течение ''времени компоновки'' (статическая компоновка) или во ''время исполнения'' (динамическая компоновка).
{{transcription-ru|компоно́вщик|}}


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


==== Значение ====
Работа компоновщика заключается в том, чтобы в каждом модуле определить и связать [[Ссылка (программирование)|ссылки]] на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его [[Адрес (информатика)|адрес]].
# {{спец.|ru}} [[модуль]] [[система|системы]] [[программирование|программирования]] или [[самостоятельный|самостоятельная]] [[программа]], которая [[компоновать|компонует]] [[результирующий|результирующую]] [[программа|программу]] из [[объектный|объектных]] [[модуль|модулей]] и [[стандартный|стандартных]] [[библиотечный|библиотечных]] [[модуль|модулей]]; то же что [[редактор связей]], [[линковщик]] {{пример|Для связывания модулей, {{выдел|компоновщик}} использует таблицы имён, созданные компилятором в каждом из объектных модулей.}}
#


==== Синонимы ====
Компоновщик обычно не выполняет проверку типов и количества параметров процедур и функций. Если надо объединить объектные модули программ, написанные на языках со строгой типизацией, то необходимые проверки должны быть выполнены дополнительной утилитой перед запуском редактора связей.
# [[редактор связей]], [[линковщик]]
#


==== Антонимы ====
== См. также ==
# -
* [[Portable Executable]]
#
* [[Executable and Linking Format]]
* [[Makefile]]
* [[Автосвязывание]]


==== Гиперонимы ====
== Примечания ==
# [[программа]], [[модуль]]
{{примечания}}
#


==== Гипонимы ====
== Литература ==
# -
* David William Barron, Assemblers and Loaders. 1972, Elsevier.
#
* John R. Levine, [http://linker.iecc.com/ Linkers and Loaders] — Morgan-Kauffman, 1999, — ISBN 1-55860-496-0
* David Salomon, Assemblers and Loaders. 1993 [http://www.davidsalomon.name/assem.advertis/asl.pdf] Chapter 7 Loaders
* [http://www.linuxjournal.com/article/6463 Linkers and Loaders by Sandeep Grover] // Linux Journal


=== Родственные слова ===
{{refless|дата=2017-07-31}}
{{родств-блок
|имена-собственные=
|существительные=компонент, компонента, компонирование, компонист, компонование, компоновка
|прилагательные=компонентный, компоновочный
|глаголы=компонировать, компонироваться, компоновать, компоноваться
|наречия=
}}


=== Этимология ===
{{Форматы исполняемых файлов}}
Происходит от глагола [[компоновать]] и далее от лат. [[componere]] — «[[складывать]]; [[строить]]; [[сочинять]]»


=== Фразеологизмы и устойчивые сочетания ===
[[Категория:Библиотеки программ]]
 
[[Категория:Теория компиляторов]]
=== Перевод ===
[[Категория:Инструменты для разработки программного обеспечения]]
{{перев-блок||
|en=[[binder]], [[linker]], [[link editor]]
|es=[[montador]]
|it=[[programma correlatore]]
|de=[[Binder]], [[Linker]]
|eo=(инф.) [[bindilo]]
}}
 
<!-- Служебное: -->
{{improve|ru|}}
{{Категория|язык=ru|Программное обеспечение}}
{{длина слова|11|ru}}

Текущая версия от 22:43, 4 ноября 2025

Шаблон:Значения термина Шаблон:О Компоновщик (также редактор связей, от англ. Шаблон:Lang-en2) — инструментальная программа, которая производит компоновку («линковку»): принимает на вход один или несколько объектных модулей и собирает из них исполняемый или библиотечный файл-модуль.

Общая схема процесса линковки. Из объектных файлов и статических библиотек собираются исполняемые файлы или новые статические или динамические библиотеки

Изначально, до появления динамических библиотек, загрузчики могли выполнять некоторые функции компоновщика<ref>Шаблон:Статья</ref>, однако сейчас, чаще всего, загрузка программ выделяется в отдельный процесс<ref>Шаблон:Книга</ref>.

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

  • Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям;
  • Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя;
  • Локальные — могут использоваться внутри объектного файла для упрощения процесса Шаблон:Нп5.

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

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

Работа компоновщика заключается в том, чтобы в каждом модуле определить и связать ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес.

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

См. также

Примечания

Шаблон:Примечания

Литература

Шаблон:Refless

Шаблон:Форматы исполняемых файлов