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_sscanf_s

  • MOD2.c 调用名为 mylinemycircle 的图形函数,这些函数在名为 MYGRAPH.lib 的库中定义。

若要生成此程序,请使用以下命令行进行编译:

CL MAIN.c MOD1.C MOD2.C MYGRAPH.lib

CL 首先编译 C 源文件,并创建对象文件 MAIN.obj、MOD1.obj 和 MOD2.obj。编译器在每个 .obj 文件中放置标准库的名称。 有关详细信息,请参阅使用运行时库

CL 将 .obj 文件的名称以及 MYGRAPH.lib 名称传递给链接器。 链接器解析外部引用,如下所示:

  1. 在 MAIN.obj 中,使用 MOD1.obj 中的定义解析对 func1 的引用;使用 MOD2.obj 中的定义解析对 func2 的引用。

  2. 在 MOD1.obj 中,使用链接器找到在 MOD1.obj 中命名的库中的定义解析对 printf_sscanf_s 的引用。

  3. 在 MOD2.obj 中,使用 MYGRAPH.lib 中的定义解析对 mylinemycircle 的引用。

另请参阅

MSVC 编译器选项
设置编译器选项