Difference between revisions of "Prelink"

From ArchWiki
Jump to: navigation, search
Line 1: Line 1:
{{Warning|On systems with glibc 2.13, prelink has been reported to prevent all dynamic executables from starting, rendering the system unbootable. Use prelink on glibc 2.13 with caution. See discussion at <nowiki>https://bbs.archlinux.org/viewtopic.php?pid=884465</nowiki> Fixed in glibc 2.13-4 (see https://bugs.archlinux.org/task/22656)}}
+
{{Warning|On systems with glibc 2.13, prelink has been reported to prevent all dynamic executables from starting, rendering the system unbootable. Use prelink on glibc 2.13 with caution. See discussion at <nowiki>https://bbs.archlinux.org/viewtopic.php?pid=884465</nowiki>
 +
 
 +
Fixed in glibc 2.13-4 (see https://bugs.archlinux.org/task/22656)}}
 
==Method==
 
==Method==
 
Most programs require libraries to function. Libraries can be integrated into a program once, by a linker, when it is compiled (static linking) or they can be integrated when the program is run by a loader, (dynamic linking). Dynamic linking has advantages in code size and management, but every time a program is run, the loader needs to find the relevant libraries. Because the libraries can move around in memory, this causes a performance penalty, and the more libraries that need to be resolved, the greater the penalty. prelink reduces this penalty by using the system's dynamic linker to reversibly perform this linking in advance ("prelinking" the executable file) by relocating. Afterward, the program only needs to spend time finding the relevant libraries on being run if, for some reason (perhaps an upgrade), the libraries have changed since being prelinked.
 
Most programs require libraries to function. Libraries can be integrated into a program once, by a linker, when it is compiled (static linking) or they can be integrated when the program is run by a loader, (dynamic linking). Dynamic linking has advantages in code size and management, but every time a program is run, the loader needs to find the relevant libraries. Because the libraries can move around in memory, this causes a performance penalty, and the more libraries that need to be resolved, the greater the penalty. prelink reduces this penalty by using the system's dynamic linker to reversibly perform this linking in advance ("prelinking" the executable file) by relocating. Afterward, the program only needs to spend time finding the relevant libraries on being run if, for some reason (perhaps an upgrade), the libraries have changed since being prelinked.

Revision as of 04:57, 13 June 2011

Warning: On systems with glibc 2.13, prelink has been reported to prevent all dynamic executables from starting, rendering the system unbootable. Use prelink on glibc 2.13 with caution. See discussion at https://bbs.archlinux.org/viewtopic.php?pid=884465 Fixed in glibc 2.13-4 (see https://bugs.archlinux.org/task/22656)

Method

Most programs require libraries to function. Libraries can be integrated into a program once, by a linker, when it is compiled (static linking) or they can be integrated when the program is run by a loader, (dynamic linking). Dynamic linking has advantages in code size and management, but every time a program is run, the loader needs to find the relevant libraries. Because the libraries can move around in memory, this causes a performance penalty, and the more libraries that need to be resolved, the greater the penalty. prelink reduces this penalty by using the system's dynamic linker to reversibly perform this linking in advance ("prelinking" the executable file) by relocating. Afterward, the program only needs to spend time finding the relevant libraries on being run if, for some reason (perhaps an upgrade), the libraries have changed since being prelinked.

Installing

Prelink is available through pacman

pacman -S prelink

Configuration

All settings are in /etc/prelink.conf

Usage

Prelinking

On 32-bit setups:

# prelink -amR

On 64-bit setups:

# prelink -aR

Removing prelink

# prelink -au