Linker and Libraries Guide

Related Topics

Dynamic Linking

Dynamic linking is a term often used to embrace those portions of the link-editing process that generate dynamic executables and shared objects, together with the runtime linking of these objects to generate a runnable process. Dynamic linking enables multiple applications to use the code provided by a shared object by enabling the application to bind to the shared object at runtime.

By separating an application from the services of standard libraries, dynamic linking also increases the portability and extensibility of an application. This separation between the interface of a service and its implementation enables the system to evolve while maintaining application stability. Dynamic linking is a crucial factor in providing an application binary interface (ABI), and is the preferred compilation method for Solaris applications.

Application Binary Interfaces

Binary interfaces between system and application components are defined to enable the asynchronous evolution of these facilities. The Solaris linkers operate upon these interfaces to assemble applications for execution. Although all components handled by the Solaris linkers have binary interfaces, the whole set of interfaces provided by the system is referred to as the Solaris ABI.

The Solaris ABI is a technological descendent for work on ABIs that started with the System V Application Binary Interface and the successor work performed by SPARC International, Inc.® for SPARC® processors called the SPARC Compliance Definition (SCD).

32–Bit and 64–Bit Environments

The link-editors operate on 32–bit objects, and on SPARCV9 systems are also capable of operating on 64–bit objects. On SPARC systems, the 64–bit link-editor (ld(1)) is capable of generating 32–bit objects and the 32–bit link-editor is capable of generating 64–bit objects. In the latter case, the size of the generated object, not including the .bss, is restricted to 2 Gbytes.

No command-line option is required to distinguish a 32–bit or 64–bit link-edit. The link-editor uses the ELF class of the first input relocatable object file it sees on the command-line to govern the mode in which it will operate. Specialized link-edits, such as linking solely from a mapfile or an archive library, are uninfluenced by their input files, and will default to a 32–bit mode. In these cases a 64–bit link-edit can be enforced with the -64 option. Intermixing of 32–bit and 64–bit objects is not permitted.

The operations of the link-editors on 32–bit and 64–bit objects is identical. This document typically uses 32–bit examples. Cases where 64–bit processing differs from the 32–bit processing are highlighted.

For more information regarding 64–bit applications, refer to the Solaris 64-bit Developer's Guide.

Environment Variables

The link-editors support a number of environment variables that begin with the characters LD_, for example LD_LIBRARY_PATH. Each environment variable can exist in its generic form, or can be specified with a _32 or _64 suffix, for example LD_LIBRARY_PATH_64. This suffix makes the environment variable specific, respectively, to 32-bit or 64–bit processes. This suffix also overrides any generic, non-suffixed, version of the environment variable that may be in effect.

Throughout this document, any reference to link-editor environment variables uses the generic, non-suffixed, variant. For a list of all supported environment variables refer to the ld(1) and ld.so.1(1) man pages.

Support Tools

The Solaris operating environment also provides several support tools and libraries. These tools provide for the analysis and inspection of these objects and the linking processes. These tools include elfdump(1), nm(1), dump(1), ldd(1), pvs(1), elf(3ELF), and a linker debugging support library. Throughout this document, many discussions are augmented with examples of these tools.