“链接器”属性页

在“项目”>“属性”>“配置属性”>“链接器”下可以找到以下属性。 有关链接器的详细信息,请参阅 CL 调用链接器链接器选项

“常规”属性页

输出文件

/OUT 选项可重写链接器创建的程序的默认名称和位置。

显示进度

打印链接器进度消息

选择项

  • 未设置 - 无详细程度。
  • 显示所有进度消息 - 显示所有进度消息。
  • 搜索的库 - 显示仅指示搜索的库的进度消息。
  • 关于优化链接期间 COMDAT 折叠 - 显示有关优化链接期间 COMDAT 折叠的信息。
  • 关于优化链接期间删除的数据 - 显示有关优化链接期间删除的函数和数据的信息。
  • 关于与 SEH 不兼容的模块 - 显示有关与安全异常处理不兼容的模块的信息。
  • 关于与托管代码相关的链接器活动 - 显示有关与托管代码相关的链接器活动的信息。

版本

/VERSION 选项指示链接器将版本号置于 .exe.dll 文件的标头中。 使用 DUMPBIN /HEADERS 查看 OPTIONAL HEADER VALUES 的映像版本字段,以查看 /VERSION 效果。

启用增量链接

启用增量链接。 (/INCREMENTAL, /INCREMENTAL:NO)

取消显示启动版权标志

/NOLOGO 选项禁止显示版权消息和版本号。

Ignore Import Library

此属性指示链接器不要将基于该版本生成的任何 .lib 输出链接到任何相关项目。 它允许项目系统处理在生成时不创建 .lib 文件的 .dll 文件。 如果项目依赖于创建 DLL 的另一个项目,则项目系统会自动链接该子项目生成的 .lib 文件。 在生成 COM DLL 或纯资源 DLL 的项目中,可能没有必要使用此属性,因为这些 DLL 没有任何有意义的导出项。 如果 DLL 没有导出项,链接器不会生成 .lib 文件。 如果没有导出 .lib 文件,并且项目系统指示链接器链接此缺少的 DLL,则链接将失败。 使用 Ignore Import Library 属性解决此问题。 设置为“是”时,项目系统会忽略是否存在此 .lib 文件,并导致依赖于此项目的任何项目不与非存在的 .lib 文件进行链接

若要以编程方式访问此属性,请参阅 IgnoreImportLibrary

Register Output

在生成输出上运行 regsvr32.exe /s $(TargetPath),仅在 .dll 项目上有效。 对于 .exe 项目,则忽略此属性。 要注册 .exe 输出,请在配置上设置生成后事件以执行注册 .exe文件始终所需的自定义注册。

若要以编程方式访问此属性,请参阅 RegisterOutput

Per-user Redirection

传统上,Visual Studio 中的注册是在 HKEY_CLASSES_ROOT (HKCR) 中完成的。 如果使用 Windows Vista 及更高版本的操作系统,则必须在提升模式下运行 Visual Studio 才能访问 HKCR。 开发人员并非总是希望在提升模式下运行,但仍然必须注册。 使用 Per-user Redirection,可在非提升模式下运行时进行注册。

Per-user Redirection 强制将任何对 HKCR 的写入重定向到 HKEY_CURRENT_USER (HKCU)。 如果关闭了 Per-user Redirection,当程序试图写入到 HKCR 时,可能导致项目生成错误 PRJ0050

附加库目录

使用户能够重写环境库路径。 (/LIBPATH:folder)

指定是否链接由依赖项目生成的 .lib 文件。 通常,需要链接 .lib 文件,但某些 DLL 可能并非如此。

还可以通过提供文件名和相对路径来指定 .obj 文件,如 ..\..\MyLibProject\MyObjFile.obj。 如果 .obj 文件的源代码具有预编译标头的 #include,例如 pch.h,则 pch.obj 文件位于与 MyObjFile.obj 相同的文件夹中。 还需要添加 pch.obj 作为额外依赖项。

使用库依赖项输入

指定在项目依赖项的库输出中进行链接时,是否使用对文档管理程序工具的输入,而不使用库文件本身。 在大型项目中,当依赖项目生成 .lib 文件时,将禁用增量链接。 如果有许多依赖项目生成 .lib 文件,则生成应用程序可能需要很长时间。 当此属性设置为“是”时,项目系统为依赖项目生成的 .lib 文件链接入 .obj 文件,从而启用增量链接

有关如何访问“常规”链接器属性页的信息,请参阅设置编译器和生成属性

指定链接器是否应显示用来指示链接的完成百分比的进度指示器。 默认不显示此状态信息。 (/LTCG:STATUS|LTCG:NOSTATUS)

禁止 DLL 绑定

/ALLOWBIND:NO 在 DLL 的标头中设置一个位,向 Bind.exe 指示不允许绑定映像。 如果 DLL 已经进行数字签名(绑定使签名无效),可能不需要绑定 DLL。

将链接器警告视为错误

/WX 导致在链接器生成警告的情况下不生成任何输出文件。

强制文件输出

/FORCE 选项指示链接器创建 .exe 文件或 DLL,即使引用的符号未经定义 (UNRESOLVED) 或经过多重定义 (MULTIPLE) 也是如此。 它可能会创建无效 .exe 文件。

选择项

  • 已启用 - /FORCE且无参数意味着 /FORCE:MULTIPLE/FORCE:UNRESOLVED
  • 仅限多重定义的符号 - 使用 /FORCE:MULTIPLE 创建输出文件,即使 LINK 发现一个符号的多个定义也是如此。
  • 仅限未定义的符号 - 使用 /FORCE:UNRESOLVED 创建输出文件,无论 LINK 是否找到未定义的符号。 如果入口点符号未解析,则忽略 /FORCE:UNRESOLVED

创建可热修补的映像

准备映像以进行热修补。

选择项

  • 已启用 - 准备映像以进行热修补。
  • 仅限 X86 映像 - 准备 X86 映像以进行热修补。
  • 仅限 X64 映像 - 准备 X64 映像以进行热修补。
  • 仅限 Itanium 映像 - 准备 Itanium 映像以进行热修补。

指定段特性

/SECTION 选项将更改节的属性,以重写编译节的 .obj 文件时设置的属性。

“输入”属性页

附加依赖项

指定要添加到链接命令行的额外依赖项,例如 kernel32.lib

忽略所有默认库

/NODEFAULTLIB 选项指示链接器从其解析外部引用时搜索的库列表中删除一个或多个默认库。

忽略特定默认库

指定一个或多个要忽略的默认库的名称。 用分号分隔多个库。 (/NODEFAULTLIB:[name, name, ...])

模块定义文件

/DEF 选项将模块定义文件 (.def) 传递给链接器。 只能将一个 .def 文件指定为 LINK。

将模块添加到程序集

使用 /ASSEMBLYMODULE 选项可以将模块引用添加到程序集。 模块中的类型信息将不适用于添加了模块引用的程序集程序。 但是,此类型信息将适用于引用该程序集的任何程序。

嵌入托管资源文件

/ASSEMBLYRESOURCE 将一个资源文件嵌入输出文件中。

强制符号引用

/INCLUDE 选项指示链接器将指定的符号添加到符号表中。

延迟加载的 DLL

/DELAYLOAD 选项会延迟加载 DLL。 dll 名称指定要延迟加载的 DLL。

/ASSEMBLYLINKRESOURCE 选项在输出文件中创建指向 .NET Framework 资源的链接。 链接器不会将资源文件放在输出文件中。

“清单文件”属性页

生成清单

/MANIFEST 指定链接器应创建并行清单文件。

清单文件

利用 /MANIFESTFILE,可以更改清单文件的默认名称。 清单文件的默认名称是追加了 .manifest 的文件名。

附加清单依赖项

/MANIFESTDEPENDENCY 允许指定将放入清单文件的依赖项段的特性。

允许隔离

指定清单查找的行为。 (/ALLOWISOLATION:NO)

启用用户帐户控制 (UAC)

指定是否启用用户帐户控制。 (/MANIFESTUAC, /MANIFESTUAC:NO)

UAC 执行级别

指定在用户帐户控制下运行时为应用程序请求的执行级别。 (/MANIFESTUAC:level=[value])

选择项

  • asInvoker - UAC 执行级别:作为调用程序。
  • highestAvailable - UAC 执行级别:最高可用。
  • requireAdministrator - UAC 执行级别:需要管理员。

UAC 绕过 UI 保护

指定是否绕过桌面上其他窗口的用户界面保护级别。 仅为辅助功能应用程序将此属性设置为“是”。 (/MANIFESTUAC:uiAccess=[true | false])

“调试”属性页

生成调试信息

此选项允许为 .exe 文件或 DLL 创建调试信息。

选择项

  • 否 - 不生成调试信息。
  • 生成调试信息 - 创建适用于分发到 Microsoft 符号服务器的完整程序数据库 (PDB)。
  • 生成针对更快链接优化了的调试信息 - 生成适用于快速编辑-链接-调试周期的程序数据库 (PDB)。
  • 生成针对共享和发布优化了的调试信息 - 生成适用于共享的编辑-链接-调试周期的程序数据库 (PDB)。

生成程序数据库文件

默认情况下,当指定 /DEBUG 时,链接器会创建一个程序数据库 (PDB) 来保存调试信息。 PDB 的默认文件名具有程序的基名称和扩展名 .pdb

去除私有符号

当使用任何生成 PDB 文件的编译器或链接器选项(/DEBUG/Z7/Zd/Zi)生成程序图像时,/PDBSTRIPPED此选项创建另一个程序数据库 (PDB) 文件。

生成映射文件

/MAP 选项指示链接器创建映射文件。

映射文件名

映射文件的用户指定名称。 它将替换默认名称。

映射导出项

/MAPINFO 选项指示链接器将指定信息包括在指定 /MAP 选项时创建的映射文件中。 EXPORTS 指示链接器包括导出的函数。

可调试的程序集

/ASSEMBLYDEBUG 发出 DebuggableAttribute 属性以及调试信息跟踪,并禁用 JIT 优化。

“系统”属性页

SubSystem

/SUBSYSTEM 选项告知操作系统如何运行 .exe 文件。 子系统的选择会影响链接器将选择的入口点符号(或入口点函数)。

选择项

  • 未设置 - 未设置子系统。
  • 控制台 - Win32 字符模式应用程序。 操作系统为控制台应用程序提供控制台。 如果定义了 mainwmain,则 CONSOLE 为默认值。
  • Windows - 应用程序不需要控制台,可能是因为它会创建自己的窗口以与用户交互。 如果定义了 WinMainwWinMain,则 WINDOWS 为默认值。
  • 本机 - Windows NT 的设备驱动程序。 如果指定了 /DRIVER:WDM,则 NATIVE 为默认值。
  • EFI 应用程序 - EFI 应用程序。
  • EFI 启动服务驱动程序 - EFI 启动服务驱动程序。
  • EFI ROM - EFI ROM。
  • EFI 运行时 - EFI 运行时。
  • POSIX - 与 Windows NT 中的 POSIX 子系统一起运行的应用程序。

所需的最低版本

指定子系统所需的最低版本。 该参数是介于 0 到 65535 之间的十进制数字。

堆保留大小

指定虚拟内存中的堆分配总大小。 默认值为 1 MB。 (/HEAP:reserve)

堆提交大小

指定物理内存中的堆分配总大小。 默认值为 4 KB。 ([/HEAP:reserve,commit](heap-set-heap-size.md))

堆栈保留大小

指定虚拟内存中的堆栈分配总大小。 默认值为 1 MB。 (/STACK:reserve)

堆栈提交大小

指定物理内存中的堆栈分配总大小。 默认值为 4 KB。 (/STACK:reserve,commit)

启用大型地址

/LARGEADDRESSAWARE 选项指示链接器,应用程序可以处理大于 2 GB 的地址。 默认情况下,如果未以其他方式在链接器行上指定 /LARGEADDRESSAWARE,则启用 /LARGEADDRESSAWARE:NO

Terminal Server (终端服务器)

/TSAWARE 选项在程序映像的可选标头的 IMAGE_OPTIONAL_HEADERDllCharacteristics 字段中设置标志。 设置此标志后,终端服务器将不会向应用程序进行某些更改。

从 CD 交换运行

/SWAPRUN 选项告知操作系统首先将连接器输出复制到交换文件,然后从那里运行映像。 此选项是 Windows NT 4.0(及更高版本)的功能。 指定 CD 后,操作系统会将映像从可移动磁盘复制到页面文件,然后加载它。

从网络交换运行

/SWAPRUN 选项告知操作系统首先将连接器输出复制到交换文件,然后从那里运行映像。 此选项是 Windows NT 4.0(及更高版本)的功能。 如果指定 NET,操作系统会首先将二进制映像从网络复制到交换文件,然后从那里加载它。 在通过网络运行应用程序时,此选项十分有用。

驱动程序

使用 /DRIVER 链接器选项生成 Windows NT 内核模式驱动程序。

选择项

  • 未设置 - 默认驱动程序设置。
  • 驱动程序 - 驱动程序
  • 仅限 UP - /DRIVER:UPONLY 导致链接器将 IMAGE_FILE_UP_SYSTEM_ONLY 位添加到输出标头中的特征,以指定它是一个单处理器 (UP) 驱动程序。 操作系统将拒绝在多处理器 (MP) 系统上加载 UP 驱动程序。
  • WDM - /DRIVER:WDM 会导致链接器在可选标头的 DllCharacteristics 字段中设置 IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 位。

“优化”属性页

参考

/OPT:REF 清除从未引用的函数和/或数据;/OPT:NOREF 保留从未引用的函数和/或数据。

启用 COMDAT 折叠

使用 /OPT:ICF[=iterations] 执行相同的 COMDAT 折叠。

函数顺序

/ORDER 选项告知 LINK 通过将某些 COMDAT 按预先确定的顺序置于映像中来优化程序。 LINK 按指定的顺序将函数置于映像的各个段中。

按配置数据库

指定用于按配置优化的 .pgd 文件。 (/PGD)

指定链接时间代码生成。 (/LTCG)

选择项

  • 默认设置 - 默认 LTCG 设置。
  • 使用快速链接时间代码生成 - 将链接时间代码生成与 /FASTGENPROFILE 配合使用。
  • 使用链接时间代码生成 - 使用链接时间代码生成
  • 按配置优化 - 检测 - 将按配置优化:PGINSTRUMENT 配合使用。
  • 按配置优化 - 优化 - 指定链接器应使用在运行已检测的二进制文件后创建的配置文件数据来创建优化的映像。
  • 按配置优化 - 更新 - 允许和跟踪要从 :PGINSTRUMENT 阶段指定的位置添加或修改的输入文件的列表。

“嵌入式 IDL”属性页

MIDL 命令

指定 MIDL 命令行选项。 (/MIDL:@responsefile)

忽略嵌入式 IDL

/IGNOREIDL 选项指定不应将源代码中的任何 IDL 属性处理到 .idl 文件中。

合并的 IDL 基文件名

/IDLOUT 选项指定 .idl 文件的名称和扩展名。

类型库

/TLBOUT 选项指定 .tlb 文件的名称和扩展名。

TypeLib 资源 ID

允许指定链接器生成的类型库的资源 ID。 (/TLBID:id)

“Windows 元数据”属性页

生成 Windows 元数据

启用或禁用 Windows 元数据的生成。

选择项

  • 是 - 启用 Windows 元数据文件的生成。
  • 否 - 禁用 Windows 元数据文件的生成。

Windows 元数据文件

/WINMDFILE 选项开关。

Windows 元数据密钥文件

指定用来对 Windows 元数据进行签名的密钥或密钥对。 (/WINMDKEYFILE:filename)

Windows 元数据密钥容器

指定用来对 Windows 元数据进行签名的密钥容器。 (/WINMDKEYCONTAINER:name)

Windows 元数据延迟符号

对 Windows 元数据进行部分签名。 如果只需要将公钥置于 Windows 元数据中,则使用 /WINMDDELAYSIGN。 默认值为 /WINMDDELAYSIGN:NO

高级属性页

入口点

[/ENTRY](entry-entry-point-symbol.md) 选项将某个入口点函数指定为 .exe 文件或 DLL 的起始地址。

无入口点

创建仅限资源的 DLL 需要 /NOENTRY 选项。 请使用此选项防止 LINK 将 _main 的引用链接到 DLL 中。

设置校验和

/RELEASE 选项在 .exe 文件的标头中设置校验和。

基址

为程序设置基址。 (/BASE:{address[,size] | @filename,key})

随机基址

随机基址。 (/DYNAMICBASE[:NO])

固定基址

创建只能在其首选基址加载的程序。 (/FIXED[:NO])

数据执行保护 (DEP)

将可执行文件标记为经测试与 Windows 数据执行保护功能兼容。 (/NXCOMPAT[:NO])

关闭程序集生成

/NOASSEMBLY 选项指示链接器为不含 .NET Framework 程序集的当前输出文件创建映像。

卸载延迟加载的 DLL

UNLOAD 限定符通知延迟加载 Helper 函数支持 DLL 的显式卸载。 (/DELAY:UNLOAD)

不绑定延迟加载的 DLL

NOBIND 限定符告知链接器不要在最终映像中包含可绑定的导入地址表 (IAT)。 默认值是为延迟加载的 DLL 创建可绑定的 IAT。 (/DELAY:NOBIND)

导入库

重写默认的导入库名。 (/IMPLIB:filename)

合并段

/MERGE 选项将第一部分与第二部分组合在一起,并将得到的结果命名为第二部分的名称。 例如,/merge:.rdata=.text.rdata 部分与 .text 部分合并,并将合并后的部分命名为 .text

目标计算机

/MACHINE 选项指定程序的目标平台。

选择项

  • 不设置
  • MachineARM
  • MachineARM64
  • MachineEBC
  • MachineIA64
  • MachineMIPS
  • MachineMIPS16
  • MachineMIPSFPU
  • MachineMIPSFPU16
  • MachineSH4
  • MachineTHUMB
  • MachineX64
  • MachineX86

Profile

生成一个可与“性能工具”探查器结合使用的输出文件。 要求将“生成调试信息”属性设置为 GenerateDebugInformation (/DEBUG)。 (/PROFILE)

CLR 线程特性

显式指定用于 CLR 程序入口点的线程特性。

选择项

  • MTA 线程特性 - 将 MTAThreadAttribute 特性应用于程序的入口点。
  • STA 线程特性 - 将 STAThreadAttribute 特性应用于程序的入口点。
  • 默认线程特性 - 与未指定 /CLRTHREADATTRIBUTE 时的结果相同。 允许公共语言运行时 (CLR) 设置默认线程特性。

CLR 映像类型

设置 CLR 映像的类型(IJW、纯或安全)。

选择项

  • 强制 IJW 映像
  • 强制纯 IL 映像
  • 强制安全 IL 映像
  • 默认映像类型

密钥文件

指定用来对程序集进行签名的密钥或密钥对。 (/KEYFILE:filename)

密钥容器

指定用来对程序集进行签名的密钥容器。 (/KEYCONTAINER:name)

延迟签名

对程序集进行部分签名。 如果仅需要将公钥置于程序集中,则使用 /DELAYSIGN。 默认值为 /DELAYSIGN:NO

CLR 非托管代码检查

/CLRUNMANAGEDCODECHECK 指定链接器是否将 SuppressUnmanagedCodeSecurityAttribute 应用到链接器生成的从托管代码到本机 DLL 的 P/Invoke 调用。

错误报告

使你能直接向 Visual Studio C++ 团队提供内部编译器错误 (ICE) 信息。

选择项

  • PromptImmediately - 立即提示。
  • 排队等候下一次登录 - 排队等候下一次登录。
  • 发送错误报告 - 发送错误报告。
  • 无错误报告 - 无错误报告。

SectionAlignment

/ALIGN 选项指定程序的线性地址空间内每段的对齐方式。 数字参数以字节为单位,必须是 2 的幂。

为 PInvoke 调用保留上次的错误代码

/CLRSUPPORTLASTERROR 默认处于打开状态,它保留上次通过 P/Invoke 机制调用函数返回的错误代码,该机制允许从使用 /clr 编译的代码调用 DLLS 中的本机函数。

选择项

  • 已启用 - 启用 /CLRSupportLastError
  • 已禁用 - 禁用 /CLRSupportLastError
  • 仅系统 DLL - 仅为系统 DLL 启用 /CLRSupportLastError

映像具有安全异常处理程序

指定 /SAFESEH 时,仅当链接器还可以生成映像安全异常处理程序的表时,才生成映像。 此表为操作系统指定对映像有效的异常处理程序。