Связывание
В проекте C++ шаг связывания выполняется после компиляции исходного кода в файлы объектов (*.obj). Компоновщик (link.exe
) объединяет файлы объектов в один исполняемый файл.
Параметры компоновщика можно задать внутри или за пределами Visual Studio. В Visual Studio вы можете получить доступ к параметрам компоновщика, щелкнув правой кнопкой мыши узел проекта в Обозреватель решений и выбрав свойства для отображения страниц свойств. Выберите компоновщик в левой области, чтобы развернуть узел и просмотреть все параметры.
Синтаксис командной строки компоновщика
При запуске компоновщика за пределами Visual Studio можно указать входные данные одним или несколькими способами:
- В командной строке
- Использование файлов команд
- В переменных среды
Компоновщик сначала обрабатывает параметры, указанные в LINK
переменной среды, а затем параметры в порядке, указанном в командной строке и в файлах команд. Если параметр повторяется с разными аргументами, последний обработанный имеет приоритет.
Параметры применяются ко всей сборке; Никакие параметры не могут применяться к определенным входным файлам.
Чтобы выполнить команду link.exe
, используйте следующий синтаксис команды:
link arguments
Параметры arguments
включения и имена файлов можно указать в любом порядке. Сначала обрабатываются параметры, а затем файлы. Используйте одно или несколько пробелов или вкладок для разделения аргументов.
Примечание.
Это средство можно запустить только из командной строки Visual Studio. Его нельзя запустить из системной командной строки или проводника.
Командная строка
В командной строке параметр состоит из описателя параметров, дефиса (-
) или косой черты вперед (/
), а затем имени параметра. Имена параметров не могут быть сокращены. Некоторые параметры принимают аргумент, указанный после двоеточия (:
). Пробелы или вкладки не допускаются в спецификации параметра, за исключением строки с кавычками в параметре /COMMENT
. Укажите числовые аргументы в десятичной или C-языковой нотации. Имена вариантов и их ключевые слова или аргументы имени файла не чувствительны к регистру, но идентификаторы в качестве аргументов чувствительны к регистру.
Чтобы передать файл компоновщику, укажите имя файла в командной строке после link.exe
команды. Можно указать абсолютный или относительный путь с именем файла и использовать подстановочные знаки в имени файла. Если опустить расширение 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
переменной_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 с отложенной загрузкой