Using ILINK32 and ILINK64 on the Command Line
Go Up to Command-Line Utilities Index
For information about technical details of ILINK32 and ILINK64, please see the Technical Details About ILINK32 and ILINK64 page.
ILINK32.EXE is the command-line interface for ILINK32, the C++ linker for 32-bit Windows. ILINK64.EXE is the command-line interface of ILINK64, the C++ linker for 64-bit Windows.
Contents
Command-Line Syntax
For ILINK 32:
ILINK32 [@<respfile>][<options>] <startup> <myobjs>, [<exefile>], [<mapfile>], [<libraries>], [<deffile>], [<resfiles>]
For ILINK64:
ILINK64 <objfiles>, <exefile>, <mapfile>, <libfiles>, <deffile>, <resfiles>
Command-Line Options
ILINK32.EXE and ILINK64.EXE command-line options are case-sensitive. ILINK32. EXE and ILINK64.EXE support the command-line options listed in the following table:
- Note: ILINK32 and ILINK64 can process options with either a hyphen
-
or a forward slash/
. (For example, the/Tpe
option can be also written as-Tpe
.)
Linker Options
Option | Description |
---|---|
@<respfile>
|
Uses the response file <respfile> .
|
/A:dd
|
For ILINK32, specifies the file alignment (for backward-compatibility switch, use /Af ).
|
/Af:nnnn
|
Specifies file alignment; set nnnn in hex or decimal. nnnn must be a power of 2.Default is |
/Ao:nnnn
|
Specifies object alignment; set nnnn in hex or decimal. nnnn must be a power of 2.Default is |
/aa
|
Builds a 64-bit Windows application. |
/ad
|
Builds a 32/64-bit Windows device driver. |
/ap
|
Builds a 32/64-bit Windows console application. |
/B:xxxx
|
Specifies the image base address and removes the relocation table. |
/b:xxxx
|
Specifies the image base address, and preserves DLL relocation table. Successive objects are aligned on 64K linear address boundaries. Improves load-time and run-time performance.
Recommended for producing DLLs. |
/C
|
Refreshes the linker state files. Erases all linker state files before each link; then recreates the files and continues with the link. |
/c
|
Treats case as significant in public and external symbols. Default is On. |
/d
|
Delay-loads a DLL. The specified DLL is not loaded or initialized until an entry point in the DLL is actually called. |
/D:xxxx
|
Saves the specified description in the PE image. |
/Enn
|
Specifies the max. number of errors. |
/GC
|
Inserts a comment string into the image directly after the object table in the PE file header. You can specify more than one string. Default is Off. |
/GD
|
Generates a Delphi-compatible RC file (DRC file). Default is Off. |
/GF:xxxx
|
Sets image flags. The xxxx flags are:
|
/Gk
|
Keeps output files on error. Default is Off. |
/Gl
|
Generates a .LIB file. |
/Gpd
|
Generates design-time-only package. Default is: the package works at both design time and run time. |
/Gpr
|
Generates run-time-only package. Default is: the package works at both design time and run time. |
/Gn
|
Don't generate state files (disable incremental linking). Subsequent links will take just as long as the first one. Default is Off. |
/GS:string=[EICRWSDKP]
|
Set section flags. Adds the specified flags to the existing flags for a given section, but cannot remove default flags from a section. Section flags are:
Example -Gs:.rsrc=W This switch makes the RSRC section writable. |
/Gz
|
Calculate checksum of target and insert result in PE header. Used for NT Kernel mode drivers and system DLLs. Default is Off. |
/H:xxxx
|
Specifies application heap reserve size in hex or decimal. Minimum value is 0. This switch overrides the HEAPSIZE setting in a module definition file. Default is 1 MB ( |
/HC:nnnn
|
Specifies application heap commit size. |
/I
|
Specifies the directory for intermediate output files. Directs linker state files, but the map debug file and debug symbol files are saved in the same directory as the output image, unless otherwise specified for the map debug file. |
/j
|
Specifies object search paths.
Example ILINK32 /jc:\myobjs;.\objs splash ^ .\common\logo,,,utils logolib OR ILINK64 /jc:\myobjs;.\objs splash ^ .\common\logo,,,utils logolib This command directs the linker to first search the current directory for SPLASH.OBJ. If the file is not found in the current directory, the linker then searches the C:\MYOBJS directory, and then the .\OBJs directory. However, the linker does not use the object search paths to find the file LOGO.OBJ because an explicit path was given for this file. |
/L
|
Specifies the library search path to use if no explicit path is given for the LIB file and the linker cannot find the LIB file in the current directory. Example ILINK32 /Lc:\mylibs;.\libs splash ^ .\common\logo,,,utils logolib OR ILINK64 /Lc:\mylibs;.\libs splash ^ .\common\logo,,,utils logolib Directs the linker to first search the current directory for SPLASH.LIB. If the file is not found in the current directory, the linker then searches the C:\MYLIBS directory, and then the .\LIBs directory. However, the linker does not use the library search paths to find the file LOGO.LIB because an explicit path was given for this file. |
/M
|
Prints the mangled C++ identifiers in the map file, not the full name. |
/m
|
The segment listing has a line for each segment, showing the segment starting address, segment length, segment name, and the segment class. The public symbols are broken down into two lists, the first showing the symbols sorted alphabetically, the second showing the symbols in increasing address order. Symbols with absolute addresses are tagged Abs . A list of public symbols is useful when debugging.
Many debuggers use public symbols, which lets you refer to symbolic addresses while debugging. |
/q
|
Suppresses command-line banner. |
/r
|
Verbose linking. Default is Off. |
/Rr
|
Replaces resources. |
/S:xxxx
|
Specifies application stack reserve size. |
/Sc:xxxx
|
Specifies application stack commit size. |
/s
|
Produces a detailed map file of segments by adding details such as group and module information to the default map file produced by the linker. |
/Tpd
|
Targets a 32/64-bit Windows DLL file. |
/Tpe
|
Targets a 32/64-bit Windows EXE file. |
/Tpp
|
Generates a package. |
/t
|
Displays time spent on link. |
/v
|
Generates a debug symbol file. |
/w
|
Turns all warnings on. |
/w-dee
|
Disables the warning:
|
/w-dpl
|
Disables the warning:
|
/w-dup
|
Disables the warning:
|
/w-exp
|
Enables the warning:
|
/w-nou
|
Disables the warning:
|
/w-rty
|
Enables the warning:
|
/w-srd
|
Disables the warning:
|
/w-snf
|
Disables the warning:
|
/w-uld
|
Disables the warning:
|
/x
|
Suppresses creation of a map debug file. |
(blank)
|
Default map file of segments (no linker switch).
By default, the linker generates a map file containing general segment information that includes:
|
Linker Response Files
You can use response files with the command-line linker to specify linker options.
Response files are tex files that list linker options and file names that you would normally type at the command line. Response files allow you longer command lines than most operating systems support, plus you do not have to continually type the same information. Response files can include the same information as configuration files, but they also support the inclusion of file names.
Unlike the command line, a response file can be several lines long. To specify an added line, end a line with a plus character (+
) and continue the command on the next line. Note that if a line ends with an option that uses the plus to turn it on (such as /v+
), the +
is not treated as a line continuation character (to continue the line, use /v+ +
).
If you separate command-line components (such as .OBJ files from .LIB files) by lines in a response file, you must leave out the comma used to separate them on the command line.
For example:
/c c0ws+ myprog,myexe + mymap + mylib cws
leaves out the commas you would have to type if you put the information on the command line:
ILINK32 /c c0ws myprog,myexe,mymap,mylib cws
OR
ILINK64 /c c0ws myprog,myexe,mymap,mylib cws
To use response files:
- Type the command-line options and file names into a text file and save the file. Response files typically have an .RSP extension.
- Type:
ILINK32 @[<path>]<RESFILE.RSP>
- OR
ILINK64 @[<path>]<RESFILE.RSP>
- where
<RESFILE.RSP>
is the name of your response file.
You can specify more than one responses file, as follows:
ilink32 /c @listobjs.rsp,myexe,mymap,@listlibs.rsp
OR
ilink64 /c @listobjs.rsp,myexe,mymap,@listlibs.rsp
- Note: You can add comments to response files using semicolons; the linker ignores any text on a line that follows a semicolon.
Command-Line Elements
The linker can also use a configuration file called ILINK32.CFG or ILINK64.CFG for options that you'd typically type at the command line.
Element | Description | Platform | |
---|---|---|---|
ILINK32 | ILINK64 | ||
[@<respfile>]
|
A response file is a text file that lists linker options and file names that you would normally type at the command line. By placing options and file names in a response file, you can save the amount of keystrokes you need to type to link your application. | ||
<options>
|
Linker options that control how the linker works. For example, options specify whether to produce an .EXE, .BPL, or .DLL file. Linker options must be preceded by either a slash (/) or a hyphen (-). | ||
<startup>
|
An initialization module for executables or DLLs that arranges the order of the various segments of the program. Failure to link in the correct initialization module usually results in a long list of error messages telling you that certain identifiers are unresolved, or that no stack has been created. | ||
<myobjs>
|
The .OBJ files you want linked. Specify the path if the files are not in the current directory. (The linker appends an .OBJ extension if no extension is present.) This section is also where you would put import libraries for Delphi packages (.bpi). | ||
<objfiles>
|
The object files (.o files) you want linked. Specify the path if the files are not in the current directory. (The linker appends an .O extension if no extension is present.)
|
||
<exefile>
|
The name you want to be given to the executable file (.EXE, .BPL, or .DLL). If you do not specify an executable file name, ILINK32 derives the name of the executable by appending .EXE, .BPL, or .DLL to the first object file name listed. (The linker assumes or appends an .EXE extension for executable files if no extension is present. It also appends a .DLL extension for dynamic link libraries if no extension is present. Similarly, the linker appends a .BPL extension for package files if no extension is present.) | ||
<mapfile>
|
The name you want to be given to the map file. If you do not specify a name, the map file name is the same as the .EXE file (but with the .MAP extension). (The linker appends a .MAP extension if you do not specify an extension.) | ||
<libraries>
|
The library files you want to be included at link time. Do not use commas to separate the libraries listed. If a file is not in the current directory or the search path (see the /L option), then you must include the path in the link statement. (The linker appends a .LIB extension if no extension is present.) The order in which you list the libraries is very important; be sure to use the order defined in this list:
|
||
<libfiles>
|
The library files (.a files) you want to be included at link time. Do not use commas to separate the libraries listed. If a file is not in the current directory or the search path (see the /L option), then you must include the path in the link statement. (The linker appends a .LIB extension if no extension is present.) The order in which you list the libraries is very important; be sure to use the order defined in this list:
|
||
<deffile>
|
The module definition file for a Windows executable. If you do not specify a module definition (.DEF) file and you have used the /Twd or /Twe option, the linker creates an application based on default settings. (The linker appends a .DEF extension if no extension is present.)
|
||
<resfiles>
|
A list of .RES files (compiled resource files) to bind to the executable. (The linker appends a .RES extension if no extension is present.) |
Command-Line Help
To display the command-line help for ILINK32, enter:
ilink32
To display the command-line help for ILINK64, enter:
ilink64
The following screen appears:
Turbo Incremental Link 6.40 Copyright (c) 1997-2017 Embarcadero Technologies, Inc. Syntax: ILINK objfiles, exefile, mapfile, libfiles, deffile, resfiles @xxxx indicates use response file xxxx General Options: -Af:nnnn Specify file alignment -C Clear state before linking -Ao:nnnn Specify object alignment -wxxx Warning control -ax Specify application type -Enn Max number of errors -b:xxxx Specify image base addr -r Verbose linking -Txx Specify output file type -q Suppress banner -H:xxxx Specify heap reserve size -c Case sensitive linking -Hc:xxxx Specify heap commit size -v Full debug information -S:xxxx Specify stack reserve size -Gn No state files -Sc:xxxx Specify stack commit size -Gi Generate import library -Vd.d Specify Windows version -GD Generate .DRC file -Dstring Set image description Map File Control: -Vd.d Specify subsystem version -M Map with mangled names -Ud.d Specify image user version -m Map file with publics -GC Specify image comment str -s Detailed segment map -GF Set image flags -x No map -Gl Static package Paths: -Gpd Design time only package -I Intermediate output dir -Gpr Runtime only package -L Specify library search paths -GS Set section flags -j Specify object search paths -Gt Fast TLS Image Control: -Gz Do image checksum -d Delay load a .DLL -Rr Replace resources
ILINK32
Using ILINK32 with BCC32.EXE
You can pass options and files to ILINK32 through the command-line compiler (BCC32.EXE) by typing file names on the command line with explicit .OBJ and .LIB extensions. For example, this command:
BCC32 mainfile.obj sub1.obj mylib.lib
links MAINFILE.OBJ, SUB1.OBJ, and MYLIB.LIB to produce the executable MAINFILE.EXE.
To pass options to the linker for BCC32.EXE, you can use -l
. For example, -ls
passes -s
to the linker. Also, it works with BCC32C.EXE.
Note: By default, BCC32 starts ILINK32 with the files C0W32.OBJ, CW32.LIB, and IMPORT32.LIB (initialization module, run-time library, and Windows import library). In addition, both the Delphi and C++ compilers always pass the linkers the/c
(case-sensitive link) option.
Topics
- Linking a C++ 64-bit Windows Hello World Application
- Linking a C++ Hello World Application
- Handling Linker Out of Memory Errors