User's Manual

program does not need to be loaded; however, it can degrade performance
throughout execution.
EXEC_MAGIC Neither the program's text nor data is shareable. In other words, the program is
an unshared executable. Usually, it is not desirable to create such unshared
executables because they place greater demands on memory resources.
By default, the linker creates executables whose magic number is SHARE_MAGIC. Table 2 (page
23) shows which linker option to use to specifically set the magic number.
Table 2 32-bit Mode Magic Number Linker Options
Use the optionTo set the magic number to
-nSHARE_MAGIC
-qDEMAND_MAGIC
-NEXEC_MAGIC
An executable file's magic number can also be changed using the chatr command (see “Changing
a Program's Attributes with chatr(1)” (page 53) ). However, chatr can only toggle between
SHARE_MAGIC and DEMAND_MAGIC; it cannot be used to change from or to EXEC_MAGIC. This
is because the file format of SHARE_MAGIC and DEMAND_MAGIC is exactly the same, while
EXEC_MAGIC files have a different format. For details on magic numbers, refer to magic(4).
In 64-bit mode, the linker sets the magic number to the predefined type for ELF object files
(\177ELF). The value of the e_type field in the ELF object file header specifies how the file should
be loaded.
File Permissions
If linker errors do not occur, the linker gives the a.out file read/write/execute permissions to all
users (owner, group, and other). If errors occur, the linker gives read/write permissions to all users.
Permissions are further modified if the umask is set (see umask(1)). For example, on a system with
umask set to 022, a successful link produces an a.out file with read/write/execute permissions
for the owner, and read/execute permissions for group and others:
$ umask
022
$ ls -l a.out
-rwxr-xr-x
1 michael
users
74440 Apr
4 14:38 a.out
Linking with Libraries
“Library Naming Conventions (page 24)
“Default Libraries (page 24)
“Link Order (page 24)
In addition to matching external references to global definitions in object files, the linker (ld)
matches external references to global definitions in libraries. A library is a file containing object
code for subroutines and data that can be used by other programs. For example, the standard C
library, libc, contains object code for functions that can be used by C, C++, FORTRAN, and
Pascal programs to do input, output, and other standard operations.
Linking with Libraries 23