Компоновщик

Поделись знанием:
Перейти к: навигация, поиск

Это статья о компоненте программного обеспечения. В Википедии также есть статья об одноименном шаблоне проектирования. В сфере разработки программного обеспечения, компоновщик (также редактор связей или ли́нкер, от англ. link editor, linker) — это инструментальная программа, которая производит компоновку («линковку»): принимает на вход один или несколько объектных модулей и собирает по ним исполнимый модуль.

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





Обзор

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

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

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

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

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

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

См. также

Напишите отзыв о статье "Компоновщик"

Примечания

  1. John R. Levine Linkers and Loaders. — 1999. — С. 1.
  2. IBM Corporation. [bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/GC28-6538-9_OS_Linkage_Editor_and_Loader_Release_21_Jan72.pdf IBM OS Linkage Editor and Loader]. — 1972.

Литература

  • David William Barron, Assemblers and Loaders. 1972, Elsevier.
  • John R. Levine, [linker.iecc.com/ Linkers and Loaders] — Morgan-Kauffman, 1999, — ISBN 1-55860-496-0
  • David Salomon, Assemblers and Loaders. 1993 [www.davidsalomon.name/assem.advertis/asl.pdf] Chapter 7 Loaders
  • [www.linuxjournal.com/article/6463 Linkers and Loaders by Sandeep Grover] // Linux Journal

Ссылки

  • [www.airs.com/blog/index.php?s=linkers Linkers (всего 20 частей)]


Отрывок, характеризующий Компоновщик

«Что я сказала, что я сделала!» подумала она, как только вышла из комнаты.
Долго ждали в этот день Наташу к обеду. Она сидела в своей комнате и рыдала, как ребенок, сморкаясь и всхлипывая. Соня стояла над ней и целовала ее в волосы.
– Наташа, об чем ты? – говорила она. – Что тебе за дело до них? Всё пройдет, Наташа.
– Нет, ежели бы ты знала, как это обидно… точно я…
– Не говори, Наташа, ведь ты не виновата, так что тебе за дело? Поцелуй меня, – сказала Соня.
Наташа подняла голову, и в губы поцеловав свою подругу, прижала к ней свое мокрое лицо.
– Я не могу сказать, я не знаю. Никто не виноват, – говорила Наташа, – я виновата. Но всё это больно ужасно. Ах, что он не едет!…
Она с красными глазами вышла к обеду. Марья Дмитриевна, знавшая о том, как князь принял Ростовых, сделала вид, что она не замечает расстроенного лица Наташи и твердо и громко шутила за столом с графом и другими гостями.


В этот вечер Ростовы поехали в оперу, на которую Марья Дмитриевна достала билет.
Наташе не хотелось ехать, но нельзя было отказаться от ласковости Марьи Дмитриевны, исключительно для нее предназначенной. Когда она, одетая, вышла в залу, дожидаясь отца и поглядевшись в большое зеркало, увидала, что она хороша, очень хороша, ей еще более стало грустно; но грустно сладостно и любовно.
«Боже мой, ежели бы он был тут; тогда бы я не так как прежде, с какой то глупой робостью перед чем то, а по новому, просто, обняла бы его, прижалась бы к нему, заставила бы его смотреть на меня теми искательными, любопытными глазами, которыми он так часто смотрел на меня и потом заставила бы его смеяться, как он смеялся тогда, и глаза его – как я вижу эти глаза! думала Наташа. – И что мне за дело до его отца и сестры: я люблю его одного, его, его, с этим лицом и глазами, с его улыбкой, мужской и вместе детской… Нет, лучше не думать о нем, не думать, забыть, совсем забыть на это время. Я не вынесу этого ожидания, я сейчас зарыдаю», – и она отошла от зеркала, делая над собой усилия, чтоб не заплакать. – «И как может Соня так ровно, так спокойно любить Николиньку, и ждать так долго и терпеливо»! подумала она, глядя на входившую, тоже одетую, с веером в руках Соню.
«Нет, она совсем другая. Я не могу»!
Наташа чувствовала себя в эту минуту такой размягченной и разнеженной, что ей мало было любить и знать, что она любима: ей нужно теперь, сейчас нужно было обнять любимого человека и говорить и слышать от него слова любви, которыми было полно ее сердце. Пока она ехала в карете, сидя рядом с отцом, и задумчиво глядела на мелькавшие в мерзлом окне огни фонарей, она чувствовала себя еще влюбленнее и грустнее и забыла с кем и куда она едет. Попав в вереницу карет, медленно визжа колесами по снегу карета Ростовых подъехала к театру. Поспешно выскочили Наташа и Соня, подбирая платья; вышел граф, поддерживаемый лакеями, и между входившими дамами и мужчинами и продающими афиши, все трое пошли в коридор бенуара. Из за притворенных дверей уже слышались звуки музыки.
– Nathalie, vos cheveux, [Натали, твои волосы,] – прошептала Соня. Капельдинер учтиво и поспешно проскользнул перед дамами и отворил дверь ложи. Музыка ярче стала слышна в дверь, блеснули освещенные ряды лож с обнаженными плечами и руками дам, и шумящий и блестящий мундирами партер. Дама, входившая в соседний бенуар, оглянула Наташу женским, завистливым взглядом. Занавесь еще не поднималась и играли увертюру. Наташа, оправляя платье, прошла вместе с Соней и села, оглядывая освещенные ряды противуположных лож. Давно не испытанное ею ощущение того, что сотни глаз смотрят на ее обнаженные руки и шею, вдруг и приятно и неприятно охватило ее, вызывая целый рой соответствующих этому ощущению воспоминаний, желаний и волнений.
Две замечательно хорошенькие девушки, Наташа и Соня, с графом Ильей Андреичем, которого давно не видно было в Москве, обратили на себя общее внимание. Кроме того все знали смутно про сговор Наташи с князем Андреем, знали, что с тех пор Ростовы жили в деревне, и с любопытством смотрели на невесту одного из лучших женихов России.