008
21.08.2003, 09:39 Uhr
0xdeadbeef
Gott (Operator)
|
Weil du sinnigerweise dynamisch linkst. Der Linker hat noch eine zweite Aufgabe, nämlich das Programm zur Laufzeit an die Bibliothek anzubinden.
Stell dir zum Beispiel mal vor, jedes KDE-Programm hätte alle Routinen der KDE-Library und aller Bibliotheken, von denen diese abhängt, fest eingebunden. KDElibs sind etwa 5 MB, Qt etwa 6, xlibs, glibc, libstdc++... das dürften so 20-30 MB sein. Sagen wir meinetwegen 20. KDE besteht aus schätzungsweise 100 Programmen, also kommen wir auf einen Overhead von 2 Gigabyte. Dazu kommt noch der eigentliche Programmcode und Bibliotheken, von denen im einzelnen zusätzlich noch abhängen - naja, im Endeffekt wäre KDE dann so 3-4 Gigabyte groß. Um das zu vermeiden, lagert man häufig benutzte Funktionen in Bibliotheken aus, die zur Laufzeit an das Programm gebunden werden; so braucht man den Code nur einmal auf der Platte und spart ohne Ende Platz. Diese Bibliotheken liegen standardmäßig in /lib (essentielle Bibliotheken wie die glibc) und /usr/lib (nicht zwingend erforderliche Bibliotheken wie Qt oder KDE).
Was die Header-Dateien angeht - in den Headerdateien stehen lediglich die Funktions- und Klassennamen, aber nicht, was die tun. Das ist zwar genug Information, um das Programm nachher an die Bibliothek anbinden zu können, reicht aber nicht, um ohne diese lauffähig zu sein. Es sei denn, man linkt statisch - aber das ist nur in Ausnahmefällen sinnvoll. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |