Компоновщик это средство сборки программ

В проекте C++ шаг связывания выполняется после компиляции компилятором исходного кода в объектные файлы (*.obj). Компоновщик (link.exe) объединяет объектные файлы в один исполняемый файл.

Параметры компоновщика можно задать как внутри, так и за пределами Visual Studio. В Visual Studio для доступа к параметрам компоновщика можно щелкнуть правой кнопкой мыши узел проекта в Обозреватель решений и выбрать свойства, чтобы отобразить страницы свойств. Выберите Компоновщик в левой области, чтобы развернуть узел и просмотреть все параметры.

Синтаксис командной строки компоновщика

При запуске LINK за пределами Visual Studio можно указать входные данные одним или несколькими способами:

  • В командной строке
  • Использование командных файлов
  • В переменных среды

LINK сначала обрабатывает параметры, указанные в переменной среды LINK, а затем параметры в порядке, указанном в командной строке и в командных файлах. Если параметр повторяется с разными аргументами, приоритет имеет последний обработанный.

C#. Паттерн проектирования программ «Компоновщик (Composite)».

Параметры применяются ко всей сборке; Никакие параметры не могут применяться к определенным входным файлам.

Чтобы выполнить LINK.EXE, используйте следующий синтаксис команды:

LINK arguments

Параметры arguments include и имена файлов и могут быть указаны в любом порядке. Сначала обрабатываются параметры, а затем файлы. Используйте одно или несколько пробелов или вкладок для разделения аргументов.

Это средство можно запустить только из командной строки Visual Studio. В системной командной строке или проводнике это невозможно.

Командная строка

В командной строке параметр состоит из описателя параметра, дефиса (-) или косой черты (/), за которым следует имя параметра. Имена параметров не могут быть сокращены. Некоторые параметры принимают аргумент, указанный после двоеточия (:). В спецификации параметра не допускаются пробелы или вкладки, за исключением строки в кавычках в параметре /COMMENT.

Укажите числовые аргументы в десятичной или C-нотации. В именах параметров и их ключевое слово или аргументах имени файла регистр не учитывается, но идентификаторы в качестве аргументов чувствительны к регистру.

Чтобы передать файл компоновщику, укажите имя файла в командной строке после команды LINK. Вы можете указать абсолютный или относительный путь с именем файла, а также использовать подстановочные знаки в имени файла. Если опустить точку (.) и расширение имени файла, link предполагает , что для поиска файла используется OBJ-файл. LINK не использует расширения имен файлов или их отсутствие для предположения о содержимом файлов; он определяет тип файла, проверяя его, и обрабатывает его соответствующим образом.

Читайте также:
Установить программу для скачивания музыки на телефон

link.exe возвращает ноль для успешного выполнения (без ошибок). В противном случае компоновщик возвращает номер ошибки, остановив ссылку. Например, если компоновщик создает LNK1104, компоновщик возвращает 1104. Соответственно, наименьшее число ошибок, возвращаемое компоновщиком при ошибке, равно 1000. Возвращаемое значение 128 представляет проблему конфигурации операционной системы или файла .config; загрузчик не загружал ни link.exe, ни c2.dll.

Шаблоны Java. Компоновщик (Composite)

Аргументы командной строки можно передать в link в виде командного файла. Чтобы указать командный файл компоновщика, используйте следующий синтаксис:

В командном файле аргументы могут быть разделены пробелами или табуляции (как в командной строке) и символами новой строки.

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

Пример

Следующая команда для сборки библиотеки DLL передает имена файлов объектов и библиотек в отдельных командных файлах и использует третий командный файл для спецификации параметра /EXPORTS:

Средство LINK использует следующие переменные среды:

  • LINK и _LINK_, если они определены. LINK добавляет параметры и аргументы, заданные в переменной среды компилятора LINK, в начало параметров и аргументов командной строки и добавляет параметры и аргументы, заданные в _LINK_, в конец аргументов командной строки перед обработкой.
  • LIB, если определено. Средства LINK используют путь LIB при поиске объекта, библиотеки или другого файла, указанного в командной строке или параметре /BASE . Средство также использует путь LIB для поиска PDB-файла, указанного в объекте. Переменная LIB может содержать один или несколько путей, разделенных точкой с запятой. Один путь должен указывать на подкаталог lib папки установки Visual C++.
  • PATH, если средству необходимо запускать программу CVTRES и не удается найти файл в том же каталоге, где находится LINK. (Для связывания RES-файла требуется CVTRES.) PATH должен указывать на подкаталог bin установки Visual C++.
  • TMP для указания каталога при связывании OMF или RES-файлов.
Читайте также:
На каком языке пишут программы для смартфонов

Источник: learn.microsoft.com

Компоновщик

Эта статья — об инструментальном средстве для сборки исполняемых программ. О шаблоне проектирования см. Компоновщик (шаблон проектирования).

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

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

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

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

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

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

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

Читайте также:
Программа которая вырезает кадры из видео

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

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

Источник: wiki2.org

Препроцессор, компилятор и компоновщик

Для того чтобы исходная программа на Си была переведена в машинный код (файл с расширением exe в операционной системе DOS), она должна пройти через три этапа: обработку препроцессором, компиляцию и компоновку.

В задачи препроцессора (preprocess – предварительно обрабатывать) входит подключение при необходимости к данной программе на Си внешних файлов, указываемых при помощи директивы #include, и подстановку макросов (macro – общий, macros – макроопределение).

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

Компоновщик связывает между собой объектный файл, получаемый от компилятора, с программами из требуемых библиотек и, возможно, с другими файлами. Компоновщик часто называют редактором связей или линковщиком (link – соединять, связывать). В результате компоновки получается файл с расширением exe (exe‑файл), который может быть исполнен компьютером. Полученный exe‑файл может быть запущен на выполнение из интегрированной среды разработки Турбо Си аналогично запуску из командной строки DOS.

Рисунок 16. Блок-схема процесса создания программы на Си

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Источник: studopedia.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru