CL 调用链接器
除非使用 /c 选项,否则 CL 会在编译后自动调用链接器。 CL 将编译过程中创建的 .obj 文件的名称以及命令行上指定的任何其他文件的名称传递给链接器。 链接器使用 LINK 环境变量中列出的选项。 可以使用 /link 选项在 CL 命令行上指定链接器选项。 /link 选项后面的选项将替代 LINK 环境变量中的选项。 下表中的选项取消链接。
选项 | 说明 |
---|---|
/c | 在不链接的情况下进行编译 |
/E、/EP、/P | 无需编译或链接即可预处理 |
/Zg | 生成函数原型 |
/Zs | 检查语法 |
有关链接的更多详细信息,请参阅 MSVC 链接器选项。
示例
假设要编译三个 C 源文件:MAIN.c、MOD1.c 和 MOD2.c。 每个文件都包含对不同文件中定义的函数的调用:
MAIN.c 在 MOD1.c 中调用函数
func1
,在 MOD2.c 中调用函数func2
。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 中,使用 MOD1.obj 中的定义解析对
func1
的引用;使用 MOD2.obj 中的定义解析对func2
的引用。在 MOD1.obj 中,使用链接器找到在 MOD1.obj 中命名的库中的定义解析对
printf_s
和scanf_s
的引用。在 MOD2.obj 中,使用 MYGRAPH.lib 中的定义解析对
myline
和mycircle
的引用。