Вызов компоновщика компилятором CL
Компилятор CL автоматически вызывает компоновщик после компиляции, если не используется параметр /c. Он передает компоновщику имена OBJ-файлов, созданных во время компиляции и имена других файлов, указанных в командной строке. Компоновщик использует параметры, перечисленные в переменной среды LINK. Можно использовать параметр /link, чтобы задать параметры в командной строке компилятора CL. Параметры, указанные после /link заменяют параметры, указанные в переменной среды LINK. Параметры, перечисленные в следующей таблице, отключают компоновку.
Параметр |
Описание |
---|---|
/c |
Компиляция без компоновки |
/E, /EP, /P |
Предварительная обработка без компиляции или компоновки |
/Zg |
Создание прототипов функций |
/Zs |
Проверка синтаксиса |
Дополнительные сведения о компоновке см. в разделе Параметры компоновщика.
Пример
Предположим, что выполняется компиляция трех исходных файлов на языке C: MAIN.c, MOD1.c и MOD2.c. В каждый файл включен вызов функции, определенной в другом файле.
В MAIN.c вызывается функция func1 из файла MOD1.c и функция func2 из MOD2.c.
В MOD1.c вызываются функции стандартной библиотеки: printf_s и scanf_s.
В MOD2.c вызываются графические функции myline и mycircle, определенные в библиотеке MYGRAPH.lib.
Для построения этой программы следует выполнить компиляцию с помощью следующей команды командной строки:
CL MAIN.c MOD1.C MOD2.C MYGRAPH.lib
Сначала CL компилирует исходные файлы C и создает объектные файлы MAIN.obj, MOD1.obj и MOD2.obj. Компилятор размещает имя стандартной библиотеки в каждом OBJ-файле. Дополнительные сведения см. в разделе Использование библиотеки времени выполнения.
Компилятор CL передает имена OBJ-файлов и имя библиотеки MYGRAPH.lib компоновщику. Компоновщик обрабатывает внешние ссылки следующим образом:
В файле MAIN.obj ссылка на функцию func1 разрешается с помощью определения в файле MOD1.obj; ссылка на функцию func2 разрешается с помощью определения в файле MOD2.obj.
В файле MOD1.obj, ссылки на функцию printf_s и scanf_s разрешаются с помощью определений в библиотеке, имя которой компоновщик обнаруживает в файле MOD1.obj.
В файле MOD2.obj, ссылки на функцию myline и mycircle разрешаются с помощью определений в файле MYGRAPH.lib.