Login
Newsletter
Fr, 15. Dezember 2000, 21:12

Platz sparen bei den Libraries

Während man Programmdateien mit dem Kommando strip (oder auch strip -s) problemlos aller Symbolinformationen berauben kann, um Platz auf der Platte oder Diskette zu sparen, geht das mit Libraries nicht ohne weiteres.

Mit Libraries meine ich hier ausschließlich Shared Libraries (also DLLs).

Erstens ist zu beachten, daß eine Library ohne Symbolinformation nutzlos ist. Das Kommando strip -s verbietet sich damit. Ohne die Option -s ist strip jedoch verwendbar, wenn man vorsichtig ist. Man darf eine Library, die möglicherweise in Benutzung ist, nicht einfach strippen. Das kann zum Absturz aller Applikationen führen, die die Library benutzen. Im Fall der C-Library kann es sogar das System komplett abstürzen lassen und verhindern, daß es danach wieder hochfährt.

Man macht also zuerst eine Kopie der Library, strippt diese und benennt das Resultat wieder in die ursprüngliche Library um. Ein Beispiel:

# cd /usr/lib
# ls -l libreadline.so.4.0
-rw-r--r-- 1 root root 207730 Mar 8 1999 libreadline.so.4.0
# cp libreadline.so.4.0 libreadline.so.4.0.orig
# strip libreadline.so.4.0.orig
# mv libreadline.so.4.0.orig libreadline.so.4.0
# ls -l libreadline.so.4.0
-rw-r--r-- 1 root root 155272 Dec 15 20:53 libreadline.so.4.0

Da der mv-Befehl in einem Schritt die alte Library löscht und die neue erstellt, funktioniert dies sogar mit der kritischsten aller Libraries, der C-Library (unter Linux meist aus dem Hause GNU).

Was passiert aber mit Programmen, die eine so behandelte Library gerade in Benutzung haben? Stürzen sie nicht ab? Die benutzte Version ist doch weg, oder?

Keineswegs. Eine Datei, die gelöscht wird, wenn ein Programm sie offen hat, bleibt unsichtbar erhalten, bis das letzte Programm sie geschlossen hat. Libraries fallen genau in diese Kategorie. Erst nach dem nächsten Reboot sind sie endgültig weg.

Kommentare (Insgesamt: 12 || Alle anzeigen )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten