Связывание

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

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

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

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

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

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

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

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

link arguments

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

Примечание.

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

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

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

Чтобы передать файл компоновщику, укажите имя файла в командной строке после link.exe команды. Можно указать абсолютный или относительный путь с именем файла, а в имени файла можно использовать wild карта s. Если опустить расширение dot (.) и filename, компоновщик предполагает расширение .obj для поиска файла. Компоновщик не использует расширения имени файла или отсутствие их для принятия предположений о содержимом файлов. Он определяет тип файла, проверяя его, и обрабатывает его соответствующим образом.

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

Файлы команд компоновщика

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

link @commandfile

Имя commandfile текстового файла. Пробел или вкладка не разрешены между знаком (@) и именем файла. Нет расширения по умолчанию; Необходимо указать полное имя файла, включая любое расширение. Дикие карта не могут использоваться. Можно указать абсолютный или относительный путь с именем файла. Компоновщик не использует переменную среды для поиска файла.

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

В командном файле можно указать все или часть командной строки. В команде link.exe можно использовать несколько файлов команд. Компоновщик принимает входные данные в командной строке, как если бы он был указан в этом расположении в командной строке. Не удается вложить файлы команд. Компоновщик отражает содержимое файлов команд, если /NOLOGO не указано.

Пример

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

link /dll @objlist.txt @liblist.txt @exports.txt

Компоновщик распознает следующие переменные среды:

  • LINK и _LINK_, если определено. Компоновщик добавляет параметры и аргументы, определенные в переменной среды, и добавляет параметры и аргументы, определенные в LINK переменной _LINK_ среды, к аргументам командной строки перед обработкой.
  • LIB, если определено. Компоновщик использует LIB путь при поиске объекта, библиотеки или другого файла, указанного в командной строке или параметре /BASE . Он также использует LIB путь для поиска .pdb файла с именем в объекте. Переменная LIB может содержать одну или несколько спецификаций пути, разделенных точкой с запятой. Один путь должен указывать на \lib подкаталог установки Visual C++.
  • PATH, если инструменту нужно запустить CVTRES и не удается найти файл в том же каталоге, что link.exe и сам. (link.exe требуется CVTRES связать .res файл.) PATH должен указывать на \bin подкаталог установки Visual C++.
  • TMP, чтобы указать каталог при связывании OMF или .res файлов.

См. также

Справочные сведения о сборке C/C++
Параметры компоновщика MSVC
Файлы module-Definition (.def)
Поддержка компоновщика для библиотек DLL с отложенной загрузкой