Linker Property Pages
The following properties are found under Project > Properties > Configuration Properties > Linker. For more information about the linker, see CL Invokes the Linker and Linker Options.
General Property Page
Output File
The /OUT
option overrides the default name and location of the program that the linker creates.
Show Progress
Prints Linker Progress Messages
Choices
- Not Set - No verbosity.
- Display all progress messages - Displays all progress messages.
- For Libraries Searched - Displays progress messages indicating just the libraries searched.
- About COMDAT folding during optimized linking - Displays information about COMDAT folding during optimized linking.
- About data removed during optimized linking - Displays information about functions and data removed during optimized linking.
- About Modules incompatible with SEH - Displays information about modules incompatible with Safe Exception Handling.
- About linker activity related to managed code - Display information about linker activity related to managed code.
Version
The /VERSION
option tells the linker to put a version number in the header of the .exe
or .dll
file. Use DUMPBIN /HEADERS
to see the image version field of the OPTIONAL HEADER VALUES
to see the effect of /VERSION
.
Enable Incremental Linking
Enables incremental linking. (/INCREMENTAL, /INCREMENTAL:NO
)
Suppress Startup Banner
The /NOLOGO
option prevents display of the copyright message and version number.
Ignore Import Library
This property tells the linker not to link any .lib
output generated from this build into any dependent project. It allows the project system to handle .dll
files that don't produce a .lib
file when built. If a project depends on another project that produces a DLL, the project system automatically links the .lib
file produced by that child project. This property may be unnecessary in projects that produce COM DLLs or resource-only DLLs, because these DLLs don't have any meaningful exports. If a DLL has no exports, the linker doesn't generate a .lib
file. If no export .lib
file is present, and the project system tells the linker to link with the missing DLL, the link fails. Use the Ignore Import Library property to resolve this problem. When set to Yes, the project system ignores the presence or absence of the .lib
file, and causes any project that depends on this project to not link with the nonexistent .lib
file.
To programmatically access this property, see IgnoreImportLibrary.
Register Output
Runs regsvr32.exe /s $(TargetPath)
on the build output, which is valid only on .dll
projects. For .exe
projects, this property is ignored. To register an .exe
output, set a postbuild event on the configuration to do the custom registration that is always required for registered .exe
files.
To programmatically access this property, see RegisterOutput.
Per-user Redirection
Registration in Visual Studio has traditionally been done in HKEY_CLASSES_ROOT
(HKCR). With Windows Vista and later operating systems, to access HKCR you must run Visual Studio in elevated mode. Developers don't always want to run in elevated mode but still must work with registration. Per-user redirection allows you to register without having to run in elevated mode.
Per-user redirection forces any writes to HKCR to be redirected to HKEY_CURRENT_USER
(HKCU). If per-user redirection is turned off, it can cause Project Build Error PRJ0050 when the program tries to write to HKCR.
Additional Library Directories
Allows the user to override the environment's library path. (/LIBPATH:folder
)
Link Library Dependencies
Specifies whether to link the .lib
files that are produced by dependent projects. Typically, you want to link in the .lib
files, but it may not be the case for certain DLLs.
You can also specify a .obj
file by providing the file name and relative path, for example, ..\..\MyLibProject\MyObjFile.obj
. If the source code for the .obj
file has a #include
for a precompiled header, for example, pch.h
, then the pch.obj
file is located in the same folder as MyObjFile.obj
. You must also add pch.obj
as an additional dependency.
Use Library Dependency Inputs
Specifies whether to use the inputs to the librarian tool, rather than the library file itself, when linking in library outputs of project dependencies. In a large project, when a dependent project produces a .lib
file, incremental linking is disabled. If there are many dependent projects that produce .lib
files, building the application can take a long time. When this property is set to Yes, the project system links in the .obj
files for .lib
files produced by dependent projects, enabling incremental linking.
For information about how to access the General linker property page, see Set compiler and build properties.
Link Status
Specifies whether the linker should display a progress indicator showing what percentage of the link is complete. The default is to not display this status information. (/LTCG:STATUS|LTCG:NOSTATUS
)
Prevent DLL Binding
/ALLOWBIND:NO
sets a bit in a DLL's header that indicates to Bind.exe
that binding the image isn't allowed. You may not want a DLL to be bound if it has been digitally signed (binding invalidates the signature).
Treat Linker Warning As Errors
/WX
causes no output file to be generated if the linker generates a warning.
Force File Output
The /FORCE
option tells the linker to create an .exe
file or DLL even if a symbol is referenced but not defined (UNRESOLVED
), or is defined multiple times (MULTIPLE
). It may create an invalid .exe
file.
Choices
- Enabled -
/FORCE
with no arguments implies both/FORCE:MULTIPLE
and/FORCE:UNRESOLVED
. - Multiply Defined Symbol Only - Use
/FORCE:MULTIPLE
to create an output file, even if LINK finds more than one definition for a symbol. - Undefined Symbol Only - Use
/FORCE:UNRESOLVED
to create an output file whether or not LINK finds an undefined symbol./FORCE:UNRESOLVED
is ignored if the entry point symbol is unresolved.
Create Hot Patchable Image
Prepares an image for hot patching.
Choices
- Enabled - Prepares an image for hot patching.
- X86 Image Only - Prepares an X86 image for hot patching.
- X64 Image Only - Prepares an X64 image for hot patching.
- Itanium Image Only - Prepares an Itanium image for hot patching.
Specify Section Attributes
The /SECTION
option changes the attributes of a section, overriding the attributes set when the .obj
file for the section was compiled.
Input Property Page
Additional Dependencies
Specifies extra dependency items to add to the link command line, for example kernel32.lib
.
Ignore All Default Libraries
The /NODEFAULTLIB
option tells the linker to remove one or more default libraries from the list of libraries it searches when resolving external references.
Ignore Specific Default Libraries
Specifies one or more names of default libraries to ignore. Separate multiple libraries with semi-colons. (/NODEFAULTLIB:[name, name, ...]
)
Module Definition File
The /DEF
option passes a module-definition file (.def
) to the linker. Only one .def
file can be specified to LINK.
Add Module to Assembly
The /ASSEMBLYMODULE
option allows you to add a module reference to an assembly. Type information in the module won't be available to the assembly program that added the module reference. However, type information in the module will be available to any program that references the assembly.
Embed Managed Resource File
/ASSEMBLYRESOURCE
embeds a resource file in the output file.
Force Symbol References
The /INCLUDE
option tells the linker to add a specified symbol to the symbol table.
Delay Loaded DLLs
The /DELAYLOAD
option causes delayed loading of DLLs. The dll name specifies a DLL to delay load.
Assembly Link Resource
The /ASSEMBLYLINKRESOURCE
option creates a link to a .NET Framework resource in the output file. The linker doesn't place the resource file in the output file.
Manifest File Property Page
Generate Manifest
/MANIFEST
specifies that the linker should create a side-by-side manifest file.
Manifest File
/MANIFESTFILE
lets you change the default name of the manifest file. The default name of the manifest file is the file name with .manifest
appended.
Additional Manifest Dependencies
/MANIFESTDEPENDENCY
lets you specify attributes that will be placed in the dependency section of the manifest file.
Allow Isolation
Specifies behavior for manifest lookup. (/ALLOWISOLATION:NO
)
Enable User Account Control (UAC)
Specifies whether or not User Account Control is enabled. (/MANIFESTUAC, /MANIFESTUAC:NO
)
UAC Execution Level
Specifies the requested execution level for the application when running with User Account Control. (/MANIFESTUAC:level=[value]
)
Choices
- asInvoker - UAC Execution Level: as invoker.
- highestAvailable - UAC Execution Level: highest available.
- requireAdministrator - UAC Execution Level: require administrator.
UAC Bypass UI Protection
Specifies whether or not to bypass user interface protection levels for other windows on the desktop. Set this property to 'Yes' only for accessibility applications. (/MANIFESTUAC:uiAccess=[true | false]
)
Debugging Property Page
Generate Debug Info
This option enables creation of debugging information for the .exe
file or the DLL.
Choices
- No - Produces no debugging information.
- Generate Debug Information - Create a complete Program Database (PDB) ideal for distribution to Microsoft Symbol Server.
- Generate Debug Information optimized for faster links - Produces a program database (PDB) ideal for a fast edit-link-debug cycle.
- Generate Debug Information optimized for sharing and publishing - Produces a program database (PDB) ideal for a shared edit-link-debug cycle.
Generate Program Database File
By default, when /DEBUG
is specified, the linker creates a program database (PDB) which holds debugging information. The default file name for the PDB has the base name of the program and the extension .pdb
.
Strip Private Symbols
The /PDBSTRIPPED
option creates a second program database (PDB) file when you build your program image with any of the compiler or linker options that generate a PDB file (/DEBUG
, /Z7
, /Zd
, or /Zi
).
Generate Map File
The /MAP
option tells the linker to create a mapfile.
Map File Name
A user-specified name for the mapfile. It replaces the default name.
Map Exports
The /MAPINFO
option tells the linker to include the specified information in a mapfile, which is created if you specify the /MAP
option. EXPORTS
tells the linker to include exported functions.
Debuggable Assembly
/ASSEMBLYDEBUG
emits the DebuggableAttribute
attribute with debug information tracking and disables JIT optimizations.
System Property Page
SubSystem
The /SUBSYSTEM
option tells the operating system how to run the .exe
file. The choice of subsystem affects the entry point symbol (or entry point function) that the linker will choose.
Choices
- Not Set - No subsystem set.
- Console - Win32 character-mode application. Console applications are given a console by the operating system. If
main
orwmain
is defined,CONSOLE
is the default. - Windows - Application doesn't require a console, probably because it creates its own windows for interaction with the user. If
WinMain
orwWinMain
is defined,WINDOWS
is the default. - Native - Device drivers for Windows NT. If
/DRIVER:WDM
is specified,NATIVE
is the default. - EFI Application - EFI Application.
- EFI Boot Service Driver - EFI Boot Service Driver.
- EFI ROM - EFI ROM.
- EFI Runtime - EFI Runtime.
- POSIX - Application that runs with the POSIX subsystem in Windows NT.
Minimum Required Version
Specify the minimum required version of the subsystem. The arguments are decimal numbers in the range 0 through 65535.
Heap Reserve Size
Specifies total heap allocation size in virtual memory. Default is 1 MB. (/HEAP:reserve
)
Heap Commit Size
Specifies total heap allocation size in physical memory. Default is 4 KB. ([/HEAP:reserve,commit
](heap-set-heap-size.md))
Stack Reserve Size
Specifies the total stack allocation size in virtual memory. Default is 1 MB. (/STACK:reserve
)
Stack Commit Size
Specifies the total stack allocation size in physical memory. Default is 4 KB. (/STACK:reserve,commit
)
Enable Large Addresses
The /LARGEADDRESSAWARE
option tells the linker that the application can handle addresses larger than 2 gigabytes. By default, /LARGEADDRESSAWARE:NO
is enabled if /LARGEADDRESSAWARE
isn't otherwise specified on the linker line.
Terminal Server
The /TSAWARE
option sets a flag in the IMAGE_OPTIONAL_HEADER
DllCharacteristics
field in the program image's optional header. When this flag is set, Terminal Server won't make certain changes to the application.
Swap Run From CD
The /SWAPRUN
option tells the operating system to first copy the linker output to a swap file, and then run the image from there. This option is a Windows NT 4.0 (and later) feature. When CD
is specified, the operating system will copy the image on a removable disk to a page file, and then load it.
Swap Run From Network
The /SWAPRUN
option tells the operating system to first copy the linker output to a swap file, and then run the image from there. This option is a Windows NT 4.0 (and later) feature. If NET
is specified, the operating system will first copy the binary image from the network to a swap file and load it from there. This option is useful for running applications over the network.
Driver
Use the /DRIVER
linker option to build a Windows NT kernel mode driver.
Choices
- Not Set - Default driver setting.
- Driver - Driver
- UP Only -
/DRIVER:UPONLY
causes the linker to add theIMAGE_FILE_UP_SYSTEM_ONLY
bit to the characteristics in the output header to specify that it's a uniprocessor (UP) driver. The operating system will refuse to load a UP driver on a multiprocessor (MP) system. - WDM -
/DRIVER:WDM
causes the linker to set theIMAGE_DLLCHARACTERISTICS_WDM_DRIVER
bit in the optional header'sDllCharacteristics
field.
Optimization Property Page
References
/OPT:REF
eliminates functions and/or data that's never referenced while /OPT:NOREF
keeps functions and/or data that's never referenced.
Enable COMDAT Folding
Use /OPT:ICF[=iterations]
to perform identical COMDAT folding.
Function Order
The /ORDER
option tells LINK to optimize your program by placing certain COMDATs into the image in a predetermined order. LINK places the functions in the specified order within each section in the image.
Profile Guided Database
Specify the .pgd
file for profile guided optimizations. (/PGD
)
Link Time Code Generation
Specifies link-time code generation. (/LTCG
)
Choices
- Default - Default LTCG setting.
- Use Fast Link Time Code Generation - Use Link Time Code Generation with
/FASTGENPROFILE
. - Use Link Time Code Generation - Use Link Time Code Generation.
- Profile Guided Optimization - Instrument - Use profile guided optimization with
:PGINSTRUMENT
. - Profile Guided Optimization - Optimization - Specifies that the linker should use the profile data created after running the instrumented binary to create an optimized image.
- Profile Guided Optimization - Update - Allows and tracks list of input files to be added or modified from what was specified in the
:PGINSTRUMENT
phase.
Embedded IDL Property Page
MIDL Commands
Specify MIDL command line options. (/MIDL:@responsefile
)
Ignore Embedded IDL
The /IGNOREIDL
option specifies that any IDL attributes in source code shouldn't be processed into an .idl
file.
Merged IDL Base File Name
The /IDLOUT
option specifies the name and extension of the .idl
file.
Type Library
The /TLBOUT
option specifies the name and extension of the .tlb
file.
TypeLib Resource ID
Allows you to specify the resource ID of the linker-generated type library. (/TLBID:id
)
Windows Metadata Property Page
Generate Windows Metadata
Enables or disables generation of Windows Metadata.
Choices
- Yes - Enable generation of Windows Metadata files.
- No - Disable the generation of Windows Metadata files.
Windows Metadata File
The /WINMDFILE
option switch.
Windows Metadata Key File
Specify a key or key pair to sign the Windows Metadata. (/WINMDKEYFILE:filename
)
Windows Metadata Key Container
Specify a key container to sign the Windows Metadata. (/WINMDKEYCONTAINER:name
)
Windows Metadata Delay Sign
Partially sign the Windows Metadata. Use /WINMDDELAYSIGN
if you only want to place the public key in the Windows Metadata. The default is /WINMDDELAYSIGN:NO
.
Advanced Property Page
Entry Point
The [/ENTRY
](entry-entry-point-symbol.md) option specifies an entry point function as the starting address for an .exe
file or DLL.
No Entry Point
The /NOENTRY
option is required for creating a resource-only DLL. Use this option to prevent LINK from linking a reference to _main
into the DLL.
Set Checksum
The /RELEASE
option sets the Checksum in the header of an .exe
file.
Base Address
Sets a base address for the program. (/BASE:{address[,size] | @filename,key}
)
Randomized Base Address
Randomized Base Address. (/DYNAMICBASE[:NO]
)
Fixed Base Address
Creates a program that can be loaded only at its preferred base address. (/FIXED[:NO]
)
Data Execution Prevention (DEP)
Marks an executable as having been tested to be compatible with Windows Data Execution Prevention feature. (/NXCOMPAT[:NO]
)
Turn Off Assembly Generation
The /NOASSEMBLY
option tells the linker to create an image for the current output file without a .NET Framework assembly.
Unload delay loaded DLL
The UNLOAD
qualifier tells the delay-load helper function to support explicit unloading of the DLL. (/DELAY:UNLOAD
)
Nobind delay loaded DLL
The NOBIND
qualifier tells the linker not to include a bindable Import Address Table (IAT) in the final image. The default is to create the bindable IAT for delay-loaded DLLs. (/DELAY:NOBIND
)
Import Library
Overrides the default import library name. (/IMPLIB:filename
)
Merge Sections
The /MERGE
option combines the first section with the second section, and gives the resulting section the second section name. For example, /merge:.rdata=.text
merges the .rdata
section with the .text
section, and names the combined section .text
.
Target Machine
The /MACHINE
option specifies the target platform for the program.
Choices
- Not Set
- MachineARM
- MachineARM64
- MachineEBC
- MachineIA64
- MachineMIPS
- MachineMIPS16
- MachineMIPSFPU
- MachineMIPSFPU16
- MachineSH4
- MachineTHUMB
- MachineX64
- MachineX86
Profile
Produces an output file that can be used with the Performance Tools profiler. Requires the Generate Debug Info property be set to GenerateDebugInformation (/DEBUG). (/PROFILE
)
CLR Thread Attribute
Explicitly specify the threading attribute for the entry point of your CLR program.
Choices
- MTA threading attribute - Applies the MTAThreadAttribute attribute to the entry point of your program.
- STA threading attribute - Applies the STAThreadAttribute attribute to the entry point of your program.
- Default threading attribute - Same as not specifying
/CLRTHREADATTRIBUTE
. Lets the Common Language Runtime (CLR) set the default threading attribute.
CLR Image Type
Sets the type (IJW, pure, or safe) of a CLR image.
Choices
- Force IJW image
- Force Pure IL Image
- Force Safe IL Image
- Default image type
Key File
Specify key or key pair to sign an assembly. (/KEYFILE:filename
)
Key Container
Specify a key container to sign an assembly. (/KEYCONTAINER:name
)
Delay Sign
Partially sign an assembly. Use /DELAYSIGN
if you only want to place the public key in the assembly. The default is /DELAYSIGN:NO
.
CLR Unmanaged Code Check
/CLRUNMANAGEDCODECHECK
specifies whether the linker will apply SuppressUnmanagedCodeSecurityAttribute
to linker-generated P/Invoke calls from managed code into native DLLs.
Error Reporting
Allows you to provide internal compiler error (ICE) information directly to the Visual Studio C++ team.
Choices
- PromptImmediately - Prompt immediately.
- Queue For Next Login - Queue for next sign-in.
- Send Error Report - Send error report.
- No Error Report - No error report.
SectionAlignment
The /ALIGN
option specifies the alignment of each section within the linear address space of the program. The number argument is in bytes and must be a power of two.
Preserve Last Error Code for PInvoke Calls
/CLRSUPPORTLASTERROR
, which is on by default, preserves the last error code of functions called through the P/Invoke mechanism, which allows you to call native functions in DLLS, from code compiled with /clr
.
Choices
- Enabled - Enable
/CLRSupportLastError
. - Disabled - Disable
/CLRSupportLastError
. - System DLLs Only - Enable
/CLRSupportLastError
for system DLLs only.
Image Has Safe Exception Handlers
When /SAFESEH
is specified, the linker will only produce an image if it can also produce a table of the image's safe exception handlers. This table specifies for the operating system which exception handlers are valid for the image.