ILINK64.EXE, the 64-bit Incremental Linker

From RAD Studio
Jump to: navigation, search

Go Up to Command-Line Utilities Index


ILINK64.EXE is the command-line interface of ILINK64, the C++ linker for 64-bit Windows.

Command-Line Syntax

ILINK64 <objfiles>, <exefile>, <mapfile>, <libfiles>, <deffile>, <resfiles>

Command-Line Elements

The 64-bit linker can also use a configuration file called ILINK64.CFG for options that you would typically type at the command line.

Element Description

<options>

Linker options that control how the linker works. For example, options specify whether to produce an .EXE 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.

<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 or .DLL). If you do not specify an executable file name, ILINK64 derives the name of the executable by appending .EXE 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.)

<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.)

<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:

  1. Any of your own user libraries (note that if a function is defined more than once, the linker uses the first definition encountered).
  2. import64.a (if you are creating an executable that uses the Windows API).
  3. Math libraries.
  4. Run-time libraries.

<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 ILINK64, enter:

ilink64

The following screen appears:

Turbo Incremental Link 6.40 Copyright (c) 1997-2012 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

Command-Line Options

ILINK64.EXE command-line options are case-sensitive.

ILINK64.EXE supports the command-line options listed in the following table:

Note: ilink64 command line options can also be written with a preceding -, instead of /. (For example, the /Tpe option can be also written as -Tpe.)

Linker Options

Option Description

@<respfile>

Uses the response file <respfile>.

/Af:nnnn

Specifies file alignment; set nnnn in hex or decimal. nnnn must be a power of 2.
Default is 0x200 = 512 byte boundaries.

/Ao:nnnn

Specifies object alignment; set nnnn in hex or decimal. nnnn must be a power of 2.
Default is 0x1000 = 4096 byte boundaries.

/aa

Builds a 64-bit Windows application.

/ad

Builds a 64-bit Windows device driver.

/ap

Builds a 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.
Default is Off.

/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:

  • -GF SWAPNET copies the image to a local swap file and runs it from there if the image resides on a network drive.
  • -GF SWAPCD copies the image to a local swap file and runs it if the image resides on removable media (CD, zip drive).
  • -GF UNIPROCESSOR prevents the application from running on a multiprocessor system.
  • -GF LARGEADDRESSAWARE tells the OS that the application understands addresses larger than 4GB.
  • -GF AGGRESSIVE aggressively trims the working set of an application when the application is idle (suited for screen savers and other processes that you want to stay out of the way of main line processes).

/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:
E = Executable
C = Contains code
I = Contains initialized data
R = Section is readable
W = Section is writable
S = Section is shared
D = Section is discardable
K = Section must not be cached
P = Section must not be paged

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 (0x1000000).

/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

 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

 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 64-bit Windows DLL file.

/Tpe

Targets a 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:
".EXE module built with a .DLL or BPL extension."

/w-dpl

Disables the warning:
"Duplicate symbol in library."

/w-dup

Disables the warning:
"Duplicate symbol."

/w-exp

Enables the warning:
"Attempt to export non-public symbol."

/w-nou

Disables the warning:
"Creating a package without any units."

/w-rty

Enables the warning:
"Unable to perform incremental link - performing full link."

/w-srd

Disables the warning:
"Stripping relocations from a DLL may cause it to malfunction."

/w-snf

Disables the warning:
"Section not found."

/w-uld

Disables the warning:
"Unable to load DLL."

/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:

  • A list of segments with their names.
  • The program start address and offset.
  • The class: CODE, DATA, BSS (uninitialized), or TLS (thread local storage).
  • Any warning or error messages produced during the link.

Handling Out of Memory Errors from ILINK64

The IDE simply displays the message Fatal: Out of Memory, but ILINK64 emits more information about each heap and how much memory was used.

For example:

Turbo Incremental Link64 6.40 Copyright (c) 1997-2012 Embarcadero Technologies,
Inc.
Overrun on linker heap: info
Linker Heaps
------------
info                   0x12271000  0x12000000
code                   0x0487d000  0x08000000
rodata                 0x00159000  0x06000000
data                   0x029bb000  0x08000000
bss                    0x08000000  0x08000000
dwarf_aranges          0x00010000  0x00200000
dwarf_macinfo          0x00010000  0x00200000
dwarf_pubtypes         0x00275000  0x02000000
dwarf_info             0x04e57000  0x06000000
dwarf_abbrev           0x00040000  0x00200000
dwarf_line             0x0124d000  0x02000000
dwarf_str              0x036e0000  0x06000000
dwarf_loc              0x00070000  0x02000000
dwarf_ranges           0x00275000  0x02000000
Fatal: Out of memory

You can use the -GH<heapname>=size to allocate larger heap or heaps.

For example, to link the release version of the DLL OWLNext library, internal C++Builder developers use -GHinfo=0x12000000.

Topics

See Also