Softwareentwicklung: Wie Sie mit dem richtigen Linker Zeit sparen
Unter Linux stehen mehrere Linker zur Auswahl. Sie unterscheiden sich nicht nur in ihren Funktionen, sondern auch bei Speicherverbrauch und Performance.
- Dr. Christoph Erhardt
Unter Linux stehen verschiedene Linker zu Auswahl. Linker können Module zusammenfügen, Sektionen verschmelzen, Symbolbezüge auflösen und dynamische Programmbibliotheken zur Laufzeit ladbar machen. Doch das ist nicht alles: Sie verfügen über erweiterte Features wie Symbolversionierung, Identical COMDAT Folding, inkrementelles Linken, Skripting und Linkzeitoptimierung.
Die Symbolversionierung ermöglicht es in einer Bibliothek, mehrere Versionen desselben Symbols bereitzustellen, zum Beispiel eine ältere und eine neue inkompatible Implementierung einer Funktion. Wer die Bibliothek nutzt, kann dem Linker mitteilen, welche Version des Symbols er einbinden soll. Das führt dazu, dass Legacy-Software unmodifiziert auch mit neueren Releases der Bibliothek lauffähig bleibt. Ein versioniertes Symbol hat als Suffix einen durch das @-Zeichen abgetrennten Versionsbezeichner, die Standardversion wird durch @@ markiert. Die glibc nutzt Symbolversionierung exzessiv und definiert beispielsweise glob@GLIBC_2.2.5
und glob@@GLIBC_2.27
, die sich in Bezug auf Symlinks unterschiedlich verhalten.
Identical COMDAT Folding (ICF) ist eine Optimierung, die mehrfach vorkommende nur lesbare Sektionen mit identischem Inhalt (Code oder Daten) dedupliziert. Das spart Speicherplatz, macht das Programm aber auch schlechter debugbar, weil deduplizierte Symbole nicht mehr eindeutig zuordenbar sind. Implementiert wird ICF in der Regel als heuristischer Löser für eine Art Graphisomorphieproblem.