Volker Kroll wrote:
Ich muß zugeben, der Unterschied zwischen .o, .a, .so etc. ist mir bisher nicht so richtig klar geworden, da die ANSI-C Bücher darauf nicht eingehen.
Ich habe zwar gerade keine passende Buchempfehlung griffbereit, aber zu den Dateitypen: Die Endung .o steht für Objekt-Dateien. Das sind fertig übersetzte, aber noch nicht gelinkte Module, also das, was der Compiler z.B. aus einer einzelnen .c-Datei macht.[1] Bei den Dateien mit der Endung .a handelt es sich um Archive (zur Handhabung siehe `man ar`), die für gewöhnlich eine Sammlung von Objekt-Dateien enthalten. In dieser Form werden Bibliotheken zum statischen Linken bereitgestellt. Das Linken gegen eine .a-Datei ist letztendlich nichts anderes, als gegen die enthaltenen .o-Dateien zu linken. Die Endung .so steht für Shared Object[2], eine Form, in der Bibliotheken zum dynamischen Linken bereitgestellt werden. Dazu kann man mehrere Objekt-Dateien zu einem Shared Object zusammenlinken. Anders als beim statischen Linken wird beim dynamischen Linken die Bibliothek nicht bei der Erstellung eines ausführbaren Programms komplett in die Programmdatei eingebaut, sondern erst bei Bedarf zur Laufzeit nachgeladen. Eilert Footnotes: [1] Genaugenommen sind das mehrere Schritte (Präprozessor, Compiler, Assembler), aber meist muß man sich mit denen nicht explizit beschäftigen, sondern überläßt das vertrauensvoll einem Frontend wie gcc und sieht so nur noch einen Schritt. [2] Die Bezeichnung kommt daher, daß eine Instanz einer solchen Bibliothek von mehreren Programmen gemeinsam genutzt werden kann. Beim statischen Linken enthält dagegen jedes Programm eine eigene Instanz der Bibliothek, was den Platzbedarf erhöht und unter Umständen auch die Wartung aufwendiger macht (bei Änderungen an der Bibliothek müssen alle davon abhängenden Programme neu gelinkt werden). -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org http://www.informatik.uni-bremen.de/~eilert/