HPlogo HP-UX Reference Volume 1 of 5 > l

ld(1)

» 

Technical documentation

Complete book in PDF

 » Table of Contents

 » Index

NAME

ld — link editor

SYNOPSIS

The link editor. Common options:

ld [-bdmnqrstvxzEGIOPQVZ] [-a search] [-c filename] [-dynamic] [-e epsym] [-h symbol] ... [-l x | file] ... [-l: library] [-m] [-noshared] [-o outfile] [-u symbol] ... [-y symbol] ... [-B bind] [-D offset] [-L dir] ... [-R offset] [-Pd] [-PD file] [-PF file] [+b path_list] [+compat] [+copyobjdebug] [+df file] [+e symbol] [+ee symbol] [+fb] [+fbu] [+gst] [+gstsize size] [+h internal_name] [+help] [+k] [+n] [+nocopyobjdebug] [+noobjdebug] [+pd size] [+pgm name] [+pi size] [+s] [+std] [+tools] [+v[no]shlibunsats] [+vallcompatwarnings] [+v[no]compatwarnings] [+FP flag] [+I symbol] [+O[no]fastaccess] [+O[no]procelim] [ +Oreusedir=dir ] [+Oselectivepercent n] [+Oselectivesize size] [+OselectiveO3] [+Ostaticprediction]

32 Bit (SOM) Link Editor options:

ld [-NST] [-A name] [-C n] [-Fl] [-Fw] [-Fz] [+cdp oldpath:newpath] [+cg pathname] [+dpv] [+gstbuckets size] [+nosmartbind] [+plabel_cache flag]

64 Bit (ELF) Link Editor options:

ld [-k filename] [+fini funciton] [+init funciton] [+interp path|file] [+[no]allowunsats] [+[no]forceload] [+hideallsymbols] [+nodefaultmap] [+noenvvar] [+nodynhash] [+nosectionmerge] [+stripunwind] [+vtype type]

DESCRIPTION

ld takes one or more object files or libraries as input and combines them to produce a single (usually executable) file. In doing so it resolves references to external symbols, assigns final addresses to procedures and variables, revises code and data to reflect new addresses (a process called "relocation"), and updates symbolic debug information when present in the file. By default, ld produces an executable file that can be run by the HP-UX loader exec() (see exec(2)). Alternatively, the linker can generate a relocatable file that is suitable for further processing by ld (see -r below). It can also generate a shared library (see -b below). The linker marks the output file non-executable if there are any duplicate symbols or any unresolved external references remain. ld may or may not generate an output file (see +k option) if any other errors occur during its operation. ld recognizes three kinds of input files: object files created by the compilers, assembler, or linker (also known as .o files), shared libraries created by the linker, and archives of object files (called archive libraries). An archive library contains a table of all the externally-visible symbols from its component object files. (The archiver command ar(1) creates and maintains this index.) ld uses this table to resolve references to external symbols.

ld processes files in the same order as they appear on the command line. It includes code and data from an archive library element if and only if that object module provides a definition for a currently unresolved reference within the user's program. It is common practice to list libraries following the names of all simple object files on the command line.

Code and data from shared libraries is never copied into an executable program. The dynamic loader /usr/lib/dld.sl on 32 bit links is invoked at startup time by the startup file crt0.o if a program uses shared libraries. Identical copies of crt0.o can be found in either /usr/ccs/lib/crt0.o or /opt/langtools/lib/crt0.o. For 64 bit, the dynamic loader is /usr/lib/pa20_64/dld.sl and is invoked by exec for those programs that use shared libraries. crt0.o is not required in shared bound links. The dynamic loader attaches each required library to the process and resolves all symbolic references between the program and its libraries. The text segment of a shared library is shared among all processes that use the library; each process using the library receives its own copy of the data segment.

ld recursively examines the dependencies of shared libraries used by a program that was created by ld. If ld does not find a supporting shared library at the path recorded in the dependency list of a shared library, and if the dependency is the result of an -l argument used when the shared library was created, ld will search all the directories that it would search for a library that was specified with -l (see -L and LPATH).

Environment Variables

Arguments can be passed to the linker through the LDOPTS environment variable as well as on the command line. The linker gets the value of LDOPTS and places its contents before any arguments on the command line.

The LD_PXDB environment variable defines the full execution path for the debug preprocessor pxdb. The default value is /opt/langtools/bin/pxdb. ld invokes pxdb on its output file if that file is executable and contains debug information. To defer invocation of pxdb until the first debug session, set LD_PXDB to /bin/true.

The LPATH environment variable can be used to specify default directories to search for library files. See the -l option.

Options

The common ld options are listed first, followed by the options supported only in a 32 bit linker, and then the options only supported in a 64 bit linker.

-a search

Specify whether shared or archive libraries are searched with the -l option. The value of search should be one of archive, shared, archive_shared, shared_archive, or default. This option can appear more than once, interspersed among -l options, to control the searching for each library. The default is to use the shared version of a library if one is available, or the archive version if not.

If either archive or shared is active, only the specified library type is accepted.

If archive_shared is active, the archive form is preferred, but the shared form is allowed.

If shared_archive is active, the shared form is preferred but the archive form is allowed.

-b

Create a shared library rather than a normal executable file. Object files processed with this option must contain position-independent code (PIC). See the discussion of PIC in cc(1), CC(1) (part of the optional C++ compiler documentation), f77(1), pc(1), as(1), and Linker and Libraries Online User Guide.

-c filename

Read ld options from a file. Each line contains zero or more arguments separated by white space. Each line in the file, including the last line, must end with a newline character. A # character implies that the rest of the line is a comment. To escape a # character, use the sequence ##.

-d

Force definition of ``common'' storage; that is, assign addresses and sizes, for -r output.

-e epsym

Set the default entry point address for the output file to be that of the symbol epsym. (This option only applies to executable files.)

-h symbol

Prior to writing the symbol table to the output file, mark this name as ``local'' so that it is no longer externally visible. This ensures that this particular entry will not clash with a definition in another file during future processing by ld.

More than one symbol can be specified, but -h must precede each one. If used when building a shared library or program, this option prevents the named symbol from being visible to the dynamic loader.

-lx

Search a library libx.a or libx.sl, where x is one or more characters. The current state of the -a option determines whether the archive (.a) or shared (.sl) version of a library is searched. Because a library is searched when its name is encountered, the placement of a -l is significant. By default, 32 bit libraries are located in /usr/lib and /usr/ccs/lib. 64 bit libraries are located in /usr/lib/pa20_64. If the environment variable LPATH is present in the user's environment, it should contain a colon-separated list of directories to search. These directories are searched instead of the default directories, but -L options can still be used. If a program uses shared libraries, the dynamic loader /usr/lib/dld.sl for 32 bit or /usr/lib/pa20_64/dld.sl for 64 bit will attempt to load each library from the same directory in which it was found at link time (see the +s and +b options).

-l: library

Search the library specified. Similar to the -l option except the current state of the -a option is not important. The library name can be any valid filename. (Note that previous releases required that the library name contain the prefix lib and end with a suffix of .a or .sl.)

-m

This option produces a load map on the standard output.

-n

This option is accepted but ignored by the 64 bit ld. Generate an executable output file with file type SHARE_MAGIC. This is the default. This option is incompatible with -N and -q.

-o outfile

Produce an output object file named outfile (a.out if -o outfile is not specified).

-q

This option is ignored for 64 bit links. Generate an executable output file with file type DEMAND_MAGIC. This option is incompatible with -n, -N, and -Q.

-r

Retain relocation information in the output file for subsequent re-linking. The ld command does not report undefined symbols. This option cannot be used when building a shared library ( -b ) or in conjunction with -A.

-s

Strip the output file of all symbol table, relocation, and debug support information. This might impair or prevent the use of a symbolic debugger on the resulting program. This option is incompatible with -r. (The strip(1) command also removes this information.)

-t

Print a trace (to standard output) of each input file as ld processes it.

-u symbol

Enter symbol as an undefined symbol in the symbol table. The resulting unresolved reference is useful for linking a program solely from object files in a library. More than one symbol can be specified, but each must be preceded by -u.

-v

Display verbose messages during linking. For each library module that is loaded, the linker indicates which symbol caused that module to be loaded.

-x

Strip local symbols from the output file. This reduces the size of the output file without impairing the effectiveness of object file utilities. This option is incompatible with the -r option . Note: use of -x might affect the use of a debugger.

-y symbol

Indicate each file in which symbol appears. More than one symbol can be specified, but each must be preceded by -y.

-z

Arrange for run-time dereferencing of null pointers to produce a SIGSEGV signal. (This is the complement of the -Z option.)

-B bind

Select run-time binding behavior of a program using shared libraries or the binding preference in building a shared library. The most common values for bind are:

deferred

Bind addresses on first reference rather than at program start-up time. This is the default.

immediate

Bind addresses of all symbols immediately upon loading the library. Commonly followed by -B nonfatal to allow procedure calls that cannot be resolved at program start-up to be resolved on first reference.

Since -B nonfatal suppresses messages about unresolved symbols, also specify -B verbose to display those messages.

See the example below.

nonfatal

If also using -B immediate, for code symbols that could not be bound at program startup, defer binding them until they are referenced. See description of -B immediate above.

Since -B nonfatal suppresses messages about unresolved symbols, also specify -B verbose to display those messages.

restricted

Causes the search for a symbol definition to be restricted to those symbols that were visible when the library was loaded.

symbolic

Used only when building a shared library (with the -b option), this option causes all unresolved symbols inside a library to be resolved internally if possible. By default, unresolved symbols are resolved to the most visible definition in the library or outside of the library.

verbose

Display verbose messages when binding symbols. This is the default except when -B nonfatal is specified. In that case, -B verbose must be explicitly specified to get verbose messages.

See the +help option or the HP-UX Linker and Libraries User's Guide manual for more information on the uses of binding modes.

-D offset

Set the origin (in hexadecimal) for the data segment.

-E

This option is accepted but ignored by the 64 bit ld. Mark all symbols defined by a program for export to shared libraries. By default, ld marks only those symbols that are actually referenced by a shared library seen at link time.

-G

Strip all unloadable data from the output file. This option is typically used to strip debug information.

-I

Instrument the code to collect profile information upon execution. The profile data gathered during program execution can be used in conjunction with the -P option. 32 bit programs linked with this option should use the startup file /opt/langtools/lib/icrt0.o. This option should not be used with the -P, -A, -O, or +O options.

-L dir

Search for libx.a or libx.sl in dir before looking in default locations. More than one directory can be specified, but each must be preceded by -L. The -L option is effective only if it precedes the -l option on the command line.

-O

Turn on linker optimizations. Currently the optimizations include the elimination of unnecessary ADDIL instructions from the code in the executable file (32 bit only), and the removal of dead procedures.

-O is passed to the linker by the compilers when the +O4 compiler option is selected.

For more details on linker optimizations refer to the +help option or the HP-UX Linker and Libraries User's Guide manual.

-P

Examine the data file produced by an instrumented program (see the -I option) to perform profile based optimizations on the code. This option should not be used with the -A option.

-Q

Ignored for 64 bit links. Generate an executable output file with file type EXEC_MAGIC or SHARE_MAGIC, depending on whether -N or -n is specified. This is the default. This option is incompatible with -q.

-R offset

Set the origin (in hexadecimal) for the text (i.e., code) segment.

-V

Output a message giving information about the version of ld being used.

-Z

Allow run-time dereferencing of null pointers. See the discussions of -Z and pointers in cc(1). (This is the complement of the -z option.)

-Pd

Reorder debuggable funcitons. Ordinarily -P does not reorder functions from .o files with debugging information, because reordering renders them non-debuggable. This option overrides this and reorders the functions.

-PD filename

Save link order file generated by Fdp during linking with -P option into user-specified file.

-PF filename

Indicate to the linker to use the specified file for the linker file instead of generating it using /usr/bin/fdp.

-dynamic

This allows the linker to create a program which can use shared libraries. This is the default for 64 bit links unless +compat is used.

-noshared

This option forces the linker to create a fully archive bound program.

+b path_list

Specify a colon-separated list of directories to be searched at program run-time to locate shared libraries needed by the executable output file that were specified with either the -l or -l: option. An argument consisting of a single colon (:) indicates that ld should build the list using all the directories specified by the -L option and the LPATH environment variable (see the +s option).

+compat

This option turns on compatibility mode in the linker — 64 bit links mimic behavior of 32 bit links.

+copyojbdebug

Copy objdebug space.

+df file

Used together with the -P option, this option specifies that file should be used as the profile database file. The default value is flow.data. See the discussion of the FLOW_DATA environment variable for more information.

+e symbol

When building a shared library or program, mark the symbol for export to the dynamic loader. Only symbols explicitly marked are exported. When building a shared library, calls to symbols that are not exported are resolved internally.

+ee symbol

This option is similar to the +e option in that it exports a symbol. However, unlike the +e option, +ee does not alter the visibility of any other symbol in the file. In a 32 bit link or +compat mode 64 bit link, it has the effect of exporting the specified symbol without hiding any of the symbols exported by default. In a 64 +std link, all symbols are exported by default, so +ee is not necessary to make a symbol visible. However, it has the additional side effect of identifying the symbol as necessary, so that it will not be removed when using dead code elimination (+Oprocelim). Of course, +ee still retains its export behavior if an option such as +hideallsymbols is also given.

+fb

Instructs the linker to run the fastbind tool on the executable it has produced. The executable should be linked with shared libraries. For more details refer to fastbind(1), the +help option, or the HP-UX Linker and Libraries User's Guide manual.

+fbu

Pass the -u option to the fastbind tool. For more details refer to fastbind(1), the +help option, or the HP-UX Linker and Libraries User's Guide manual.

+gst

Enable the global symbol table hash mechanism, used to look up values of symbol import/export entries. The +gst and related options provide proformance enhancements through use of global symbol table which improves searching for exported symbols. See dld.sl(5) and the HP-UX Linker and Libraries Online User Guide for more information.

+gstsize size

Request a particular hash array size using the global symbol table hash mechanism. The default value is 1103. The value can be overridden at runtime with the STMTAB_DEFAULT_SIZE environment variable. You can set the value using chatr +gstsize size file.

+h internal_name

When building a shared library, record internal_name as the name of the library. When the library is used to link another executable file (program or shared library), this internal_name is recorded in the library list of the resulting output file instead of the file system pathname of the input shared library.

If internal_name is a fully-qualified pathname, it is recorded as is in the library list of any executable file it is subsequently linked against. If internal_name is a relative pathname or no directory component was specified, internal_name is appended to the file system directory component of the input shared library in the library list of any executable file it is subsequently linked against.

If more than one +h option is seen on the link line, the first one is used and a warning message is emitted.

+help

Starts the help window utility HP-UX Linker and Libraries Online User Guide which comes with some HP compilers. (You must be running the X window system and your $DISPLAY environment variable must be set to the name of your workstation or X terminal.) For more information, refer to the HP-UX Linker and Libraries User's Guide manual. See manuals(5) for ordering information.

+k

Direct the linker to only create an executable if there were no errors encountered during the link. If there were errors found (system errors or unresolved references), the output file will be removed.

+n

Causes the linker to load all object modules before searching any archive or shared libraries. Then it searches the archive and shared libraries specified on the command line in left to right order. Repeats the left to right search of the libraries on the command line until there are no more unsatisfied symbols, or the last search added no new definitions. This option is useful if two libraries are specified that have symbol dependencies on each other.

+nocopyobjdebug

Do not copy objdebug space.

+noobjdebug

Use old debugging information model and format rather than new debugging format. This option overrides the +objdebug compiler options, which generates debugging information in ELF output.

+pd size

Request a particular virtual memory page size that should be used for data. Sizes of 4K, 16K, 64K, 256K, 1M, 4M, 16M, 64M, 256M, D, and L are supported. A size of D allows the kernel to choose what page size should be used. A size of L will result in using the largest page size available. The actual page size may vary if the requested size cannot be fulfilled.

+pgm name

Used together with the -P option, this option specifies that name should be used as the look-up name in the profile database file. The default is the basename of the output file (specified by the -o option.)

+pi size

Request a particular virtual memory page size that should be used for instructions. See the +pd option for additional information.

+s

Indicates that at run-time, the shared library loader can use the environment variable SHLIB_PATH and LD_LIBRARY_PATH (64 bit only) to locate shared libraries needed by the executable output file that were specified with either the -l or -l: option. The environment variables should be set to a colon-separated list of directories. If both +s and +b are used, their relative order on the command line indicates which path list will be searched first (see the +b option).

+std

This option is ignored for 32 bit links. Turns on standard mode, which is the default. Options turned on with this option are: -dynamic. Options turned off or ignored when this option is specified are: +compat,+noenvvar,-noshared. +vallcompatwarnings This option is accepted but ignored by the 64 bit ld. Show more detail for any warnings about compatibility issues. By default, only a terse message is printed. See the WARNINGS section below for further details.

+v[no]compatwarnings

This option is accepted but ignored by the 64 bit ld. Enable [disable] printing warnings about compatibility issues between systems. This includes any functionality which may change in future releases. The default is +vcompatwarnings. See the WARNINGS section below for further details.

+v[no]shlibunsats

Enable [disable] printing a list of unsatisfied symbols used by shared libraries. The default is +vnoshlibunsats. Some unsatisfied symbols reported by the linker are not required at run time because the modules which reference the symbols are not used.

+FP flag

Specify how the environment for floating-point operations should be initialized at program start-up. By default, all behaviors are disabled. The following flags are supported (upper case flag enables; lower case flag disables):

V (v)

Trap on invalid floating-point operations

Z (z)

Trap on divide by zero

O (o)

Trap on floating-point overflow

U (u)

Trap on floating-point underflow

I (i)

Trap on floating-point operations that produce inexact results.

D (d)

Enable sudden underflow (flush to zero) of denormalized values.

Note: Enabling sudden underflow is an undefined operation on PA-RISC 1.0-based systems, but it is defined on all subsequent versions of PA-RISC. Selecting this flag enables sudden underflow only if it is available on the processor being used at run-time.

To dynamically change these settings at run-time, see fesettrapenable(3M).

+I symbol

Specify the name of the initializer function when building a shared library. A shared library may have multiple initializers specified. Initializers are executed in the order that they are specified. For more details on the initializer function, refer to the +help option or the HP-UX Linker and Libraries User's Guide manual.

+O[no]fastaccess

Enable [disable] fast access to global data. The linker rearranges the data to further reduce the number of ADDIL instructions in the executable.

This optimization may reveal some subtle programming errors related to assumptions about data layout. This optimization can occur at optimization levels 2, 3 and 4. The default is +Onofastaccess at optimization levels 2 and 3, and +Ofastaccess at optimization level 4.

Using the +Ofastaccess option in the presence of debug information generates a warning message and can cause corruption of the debug information. Avoid using +Ofastaccess with the -g option.

This option is accepted but ignored by the 64 bit ld.

+O[no]procelim

Enable [disable] the elimination of procedures that are not referenced by the application. The default is +Onoprocelim. Procedure elimination can occur at any optimization level, including level 0. For more details refer to the +help option or the HP-UX Linker and Libraries User's Guide manual.

+Oreusedir=dir

Specify the name of the directory to use as the reuse repository for the object code reuse feature. This directory holds the compiled object files for reuse. dir can be an absolute or relative path to directory where you invoked the linker. The +Oreusedir option shortens link time by not recompiling intermediate object code to object code when using +O4 or profile-based optimization.

+Oselectivepercent n

Instructs the interprocedural optimizer driver to pass the first n percent of the object files to the high level optimizer for interprocedural optimizations such as inlining.

+Oselectivesize size

Instructs the interprocedural optimizer driver to pass the first k routines to the high level optimizer for interprocedural optimization where the size of k routines are approaching but less than size.

+OselectiveO3

Instructs the interprocedural optimizer driver to compile the routines not included in the +O4 list to be compiled at +O3.

+Ostaticprediction

Meaningful only on PA 2.0 architecture, this option sets the branch prediction bit in the output executable file's auxiliary header.

+pd size

Request a particular virtual memory page size that should be used for data. Sizes of 4K, 16K, 64K, 256K, 1M, 4M, 16M, 64M, 256M, D, and L are supported. A size of D allows the kernel to choose what page size should be used. A size of L will result in using the largest page size available. The actual page size may vary if the requested size cannot be fulfilled.

+pi size

Request a particular virtual memory page size that should be used for instructions. See the +pd option for additional information.

32 Bit Link Editor Options

-A name

This option specifies incremental loading. Linking is arranged so that the resulting object can be read into an already executing program. The argument name specifies a file whose symbol table provides the basis for defining additional symbols. Only newly linked material is entered into the text and data portions of a.out, but the new symbol table reflects all symbols defined before and after the incremental load. Also, the -R option can be used in conjunction with -A, which allows the newly linked segment to commence at the corresponding address. The default starting address is the old value of _end. The -A option is incompatible with -r and -b. Also note that a program that dynamically loads code with ld -A cannot use shared libraries. See the +help option or the HP-UX Linker and Libraries User's Guide manual for a description of this option.

-Cn

Set the maximum parameter-checking level to n. The default maximum is 3. See the language manuals for the meanings of the parameter-checking level.

-Fl

Force load a library.

-Fw

Don't emit unwind tables.

-Fz

Disable the linker feature that translates some calls to $$dyncall_external to calls to $$dyncall.

-N

Generate an executable output file with file type EXEC_MAGIC. This option is incompatible with -n and -q. This option causes the data to be placed immediately following the text, and makes the text writable. Files of this type cannot be shared.

-S

Generate an Initial Program Loader (IPL) auxiliary header for the output file, instead of the default HP-UX auxiliary header.

-T

Save the load data and relocation information in temporary files instead of in memory during linking. This option reduces the virtual memory requirements of the linker. If the TMPDIR environment variable is set, the temporary files are created in the specified directory, rather than in /var/tmp.

+cdp oldpath:newpath

Replace the recorded (embedded) path for shared libraries in the a.out. In 32-bit mode, ld records the absolute path names of any shared libraries searched at link time in the a.out file. When the program begins execution, the dynamic loader attaches any shared libraries that were searched at link time. Although you can use the +b and/or +s linker options to direct the dynamic loader to directories to search for the shared libraries, the dynamic loader, as a last resort, searchs for the shared libraries in its absolute, recorded (embedded) path in the a.out. In 32-bit mode, you can use the linker option +cdp to replace the recorded (embedded) path for shared libraries in the a.out.

+cg pathname

Specify the use of pathname as the code generator for compiling ISOMs to SOMs. See the discussion of profile based optimization for more information.

+dpv

Display verbose messages regarding procedures which have been removed due to dead procedure elimination. The symbol name, input object file, and the size (in bytes) of the deleted procedure are displayed. The total size (in bytes) of the deleted procedures is also displayed.

+gstbuckets size

Request a particular number of buckets per entry using the global symbol table hash mechanism. The default value is 3. The value can be overridden at runtime with the STMTAB_DEFAULT_NBUCKETS environment variable. You can set the value using chatr +gstbuckets size file.

+nosmartbind

Disable SmartBind when binding a shared library. With this option enabled, the linker places all symbols in the link into a single SmartBind module instead of placing each .o file in its own module.

+plabel_cache

Enable the plabel caching mechanism. Use this option with the +gst option. This option is only effective with C++.

64 bit Link Editor Options

-k filename

filename specifies a mapfile that describes the output file memory map. Please refer to HP-UX Linker and Libraries User's Guide guide for more information. Also see +nodefaultmap.

+[no]allowunsats

+allowunsats Does not flag errors if the resulting output file has unsatisfied symbols. This is the default for relocatable links and dll builds. +noallowunsats Flags an error if the resulting output file has unsatisfied symbols. This is the default for program files.

+fini function_name

Specify the terminator function.

+init function_name

Specify the initializer function.

+interp path|file

Change the dld path to use the argument as the "interpreter" program instead of the dld.sl.

+[no]forceload

+forceload loads all object files from archive libraries. +noforceload is the default — loads only the required object files from archive libraries. The mode that is selected, either explicitly or by default, remains on until it is changed.

+hideallsymbols

This option is used to prevent all the symbols from being exported unless explicitly exported with the +e.

+nodefaultmap

This option tells the linker not to use the default memory map. The user needs to supply a mapfile through the -k linker option.

+nodynhash

Disables the default linker behaviour of the +gst option to create the .dynhash section for executables or shared libraries. Use this option to eliminate generation of pre-computed hash table information for a library or an executable that is rarely used with the global symbol table lookup scheme or for which the overhead of storing pre-computed hash values is too high. This option has no effect when used with the -r option.

+noenvvar

Instructs the dynamic loader to not look at the LD_LIBRARY_PATH and SHLIB_PATH environment variables at runtime. This is turned on if ld +compat is specified. This is turned off by default or if ld +std is specified. See +compat or +std. Generally, this option is used for secure programs (e.g. setuid).

+nosectionmerge

Used with the -r option to allow procedures to be positioned independently. The default is to merge all procedures into a single section.

+stripunwind

Do not output the unwind table.

+tools

Request that the application be linked for profiling with CXperf.

+vtype type

Produces verbose output about the link operation. type can have the following values:

files

Dump info about each object file loaded.

libraries

Dump info about libraries searched.

procelim

Dump info about sections that have been rejected by the +Oprocelim option

sections

Dump info about each input section added to the output file.

symbols

Dump info about global symbols referenced/defined from/in the input files.

all

Dumps all of the above info. Same as -v.

Defaults

Unless otherwise directed, ld names its output a.out. The -o option overrides this. Executable output files are of type SHARE_MAGIC. The default state of -a is to search shared libraries if available, archive libraries otherwise. The default bind behavior is deferred.

The default value of the -Z/-z option is -Z.

For 64 bit, +std is on by default.

EXTERNAL INFLUENCES

Environment Variables

The following internationalization variables affect the execution of ld:

FLOW_DATA

An instrumented executable (see the -I option) writes out the profile data to a database file named flow.data in the current directory. The name and location of this file can be specified by setting FLOW_DATA to the desired path name. The profile data is stored in the database file under a look-up name that is the same as the basename of the executable file specified at run-time. A single flow.data file can hold profile data for multiple program files.

LANG

Determines the locale category for native language, local customs and coded character set in the absence of LC_ALL and other LC_* environment variables. If LANG is not specified or is set to the empty string, a default of C (see lang(5)) is used instead of LANG.

LC_ALL

Determines the values for all locale categories and has precedence over LANG and other LC_* environment variables.

LC_MESSAGES

Determines the locale that should be used to affect the format and contents of diagnostic messages written to standard error.

LC_NUMERIC

Determines the locale category for numeric formatting.

LC_CTYPE

Determines the locale category for character handling functions.

NLSPATH

Determines the location of message catalogs for the processing of LC_MESSAGES.

If any internationalization variable contains an invalid setting, ld behaves as if all internationalization variables are set to C. See environ(5).

In addition, the following environment variable affects ld:

TMPDIR

Specifies a directory for temporary files (see tmpnam(3S)).

DIAGNOSTICS

ld returns zero when the link is successful. A non-zero return code indicates that an error occurred.

EXAMPLES

Link part of a C program for later processing by ld. (Note the .o suffix for the output object file; this is an HP-UX convention for indicating a linkable object file):

ld -r file1.o file2.o -o prog.o

On 32 bit, link a simple FORTRAN program for use with the dde symbolic debugger (see dde(1)). Output file name is a.out since there is no -o option in the command line.

ld /usr/ccs/lib/crt0.o ftn.o -lcl -lisamstub \ -lc /opt/langtools/lib/end.o

To do this on 64 bit:

ld ftn.o -lcl -lisamstub \ -lc /opt/langtools/lib/pa20_64/end.o

On 64 bit, link a shared bound program in standard mode. Note that crt0.o is not specified because for shared links, it is no longer necessary.

ld himom.o +std -lc

On 64 bit, link a compatibility mode program. crt0.o is included because this is an archive link.

ld /opt/langtools/lib/pa20_64/crt0.o himom.o +compat -a archive -lc

Create a shared library:

ld -b -o libfunc.sl func1.o func2.o func3.o

Create a shared library with an internal name:

ld -b -o libfoo1.1 foo1.o foo2.o +h libfoo1.1

On 32 bit, link a program with libfunc.sl but use the archive version of the C library. Specify the immediate binding mode together with the nonfatal modifier and allow verbose diagnostics to be displayed:

ld /usr/ccs/lib/crt0.o -B immediate -B nonfatal -B verbose \ program.o -L . -lfunc -a archive -lc

To do this on 64 bit:

ld -B immediate -B nonfatal -B verbose \ program.o -L . -lfunc -a archive -lc

On 32 bit, link a Pascal program:

ld /usr/ccs/lib/crt0.o main.o -lcl -lm -lc

Note that in the above examples, /usr/ccs/lib/crt0.o can be replaced by /opt/langtools/lib/crt0.o.

WARNINGS

ld recognizes several names as having special meanings. The symbol _end is reserved by the linker to refer to the first address beyond the end of the program's address space. Similarly, the symbol _edata refers to the first address beyond the initialized data, and the symbol _etext refers to the first address beyond the program text. The symbols end, edata, and etext are also defined by the linker, but only if the program contains a reference to these symbols and does not define them (see end(3C) for details). On 32 bit, the symbol __tdsize is the total thread local storage size required by the program or shared library.

On 64 bit, the linker defines a few more symbols. The symbol __TLS_SIZE is the total thread local storage size. The symbol _FPU_STATUS is the initial status of the FPU status register. The symbol __SYSTEM_ID is the largest architecture revision level used by any compilation unit.

The linker treats a user definition of any of the symbols listed here as an error.

Through its options, the link editor gives users great flexibility. However, those who invoke the linker directly must assume some added responsibilities. Input options should ensure the following properties for programs:

  • When the link editor is called through cc(1), a start-up routine is linked with the user's program. This routine calls exit(2) after execution of the main program. If users call ld directly, they must ensure that the program always calls exit() rather than falling through the end of the entry routine.

  • When linking for use with the symbolic debugger dde, the user must ensure that the program contains a routine called main. Also, the user must link in the file /opt/langtools/lib/end.o on 32 bit and /opt/langtools/lib/pa20_64/end.o on 64 bit as the last file named on the command line.

There is no guarantee that the linker will pick up files from archive libraries and include them in the final program in the same relative order that they occur within the library.

The linker emits warnings where ever it detects any compatibility issues. Among other things, these issues include architectural ones, as well as functionality that may change over time. Some of these include:

  • Linking a PA 2.0 object file, which will not run on a PA 1.x system.

  • Incremental loading with the -A option.

  • Procedure call parameter and return type checking, including the -C option.

  • Symbols with the same name but different types, such as CODE and DATA.

  • Checking of unsatisfied symbols by the linker, which sometimes skips certain object files from an archived library. This warning is only given if the -v option is also provided.

  • Versioning of objects within a shared library.

These messages can be turned off with the +vnocompatwarnings option.

As noted in the Options section, certain options no longer exist in a 64 bit linker. They are:

  • -q

  • -A

  • -C

  • -E

  • -Q

  • -S

  • -T

  • -X

  • +dpv

AUTHOR

ld was developed by AT&T, the University of California, Berkeley, and HP.

FILES

/usr/lib/lib*

32 bit system archive and shared libraries

/usr/lib/pa20_64/lib*

64 bit system archive and shared libraries

/usr/ccs/lib*

32 bit development archive and shared libraries

/opt/langtools/lib/pa20_64

64 bit development object files, archive and shared libraries

a.out

output file

/usr/lib/dld.sl

32 bit dynamic loader

/usr/lib/pa20_64/dld.sl

64 bit dynamic loader

/opt/langtools/lib/end.o

for use with the 32 bit dde debugger

/opt/langtools/lib/pa20_64/end.o

for use with the 64 bit dde debugger

/usr/ccs/lib/crt0.o

32 bit run-time startup file

/opt/langtools/lib/crt0.o

Identical to /usr/ccs/lib/crt0.o

/opt/langtools/lib/pa20_64/crt0.o

64 bit run-time startup file

/usr/ccs/lib/dyncall.o

32 bit only. Used with -A option links

/opt/langtools/lib/mcrt0.o

32 bit run-time startup with profiling (see prof(1))

/opt/langtools/lib/pa20_64/mcrt0.o

64 bit run-time startup with profiling

/usr/lib/milli.a

32 bit millicode library automatically searched by ld

/usr/lib/pa20_64/milli.a

64 bit millicode library automatically searched by ld

/opt/langtools/lib/gcrt0.o

run-time start-up with profiling (see gprof(1))

/opt/langtools/lib/pa20_64/gcrt0.o

64 bit run-time start-up with profiling (see gprof(1))

/opt/langtools/lib/icrt0.o

32 bit run-time start-up with profiling (see discussion of profile based optimization above.)

/opt/langtools/lib/pa20_64/icrt0.o

64 bit run-time start-up with profiling (see discussion of profile based optimization above.)

/usr/lib/nls/$LANG/ld.cat

message catalog

/var/tmp/ld*

temporary files

flow.data

file containing profile data generated by running an instrumented executable

/usr/ccs/bin/fdp

program for creating the procedure link order from a profile database file created by an instrumented executable; forked by the -P option

/opt/langtools/lbin/ucomp

PA-RISC code generator

SEE ALSO

Profiling and Debugging Tools:

adb(1)

absolute debugger

gprof(1)

display call graph profile data

prof(1)

display profile data

dde(1)

C, C++, FORTRAN, and Pascal symbolic debugger

System Tools:

aCC(1)

invoke the HP-UX aC++ compiler

ar(1)

create archived libraries

CC(1)

invoke the HP-UX C++ compiler

cc(1)

invoke the HP-UX C compiler

chatr(1)

change program's internal attributes

exec(2)

execute a file

f77(1)

invoke the HP-UX FORTRAN 77 compiler

f90(1)

invoke the HP-UX Fortran 90 compiler

fastbind(1)

invoke the fastbind tool

nm(1)

print name list of object file

pc(1)

invoke the HP-UX Pascal compiler

strip(1)

strip symbol and line number information from an object file

Miscellaneous:

a.out(4)

assembler, compiler, and linker output

ar(4)

archive format

crt0(3)

execution startup routine

dld.sl(5)

dynamic loader

end(3C)

symbol of the last locations in program

Texts and Tutorials:

HP-UX Linker and Libraries Online User Guide

(See the +help option)

HP-UX Linker and Libraries User's Guide

(See manuals(5) for ordering information)

STANDARDS CONFORMANCE

ld: SVID2, SVID3, XPG2, XPG4

© Hewlett-Packard Development Company, L.P.