Steffen Dettmer schrieb:
* Philipp Thomas wrote on Fri, Dec 23, 2005 at 00:58 +0100:
denn rpm benutzt Funktionen zur Namensauflösung, die seit Einführung des nsswitch *grundsätzlich* dynamisch geladen werden.
Hast Du da nähere Informationen dazu, einen Link oder so?
Nein, da habe ich derzeit nichts zur Hand.
Warum darf ich nicht statisch linken, wenn ich Namen auflösen möchte?
Naja, "darfst nicht" ist vieleicht zu stark ausgedrückt. Du darfst ja, wenn du dir der Einschränkungen bewusst bist. Um die Auflösung von Namen zur Laufzeit konfigurierbar zu machen, ersann Sun den nsswitch, der dann auch in der glibc implementiert wurde. Damit kannst du zur Laufzeit über /etc/nsswitch.conf bestimmen, welche Dienste zur Namensauflösung (wie z.B. mittels gethostbyname()) benutzt werden. Damit das funktioniert, sind die dienstspezifischen Zugriffsroutinen in einzelne dynamische Bibliotheken (libnss_*) gekapselt, die *grundsätzlich* dynamisch geladen werden, auch wenn die glibc statisch gelinkt wird. Somit bekommst du *nie* ein völlig statisch gelinktes Programm welches unabhängig von dynamischen Bibliotheken ist. Ausserdem ist dieses Programm nun abhängig von einer bestimmten Version der libnss_* Bibliotheken (diejenigen die zu der statisch gelinkten glibc gehören). Genau aus diesem Sachverhalt kannst du übrigens auf Solaris von vornherein kein Programm statisch linken, das diese Funktionen zur Namensauflösung verwendet. Wird nun die glibc durch eine neuere Version ersetzt, bei welcher die Schnittstelle zwischen libnss_* und der glibc nicht mehr kompatibel ist, hört das Programm auf zu funktionieren. Und genau das ist in der Vergangenheit schon mal passiert, weshalb dann bei Spezialisten, die unbedacht nur die glibc aktualisierten, Programme wie rpm sich mit segfault oder Ähnlichem verabschiedeten. Wenn also vollstatisch für solche Programme eh nicht möglich ist, sollte man sie gleich dynamisch linken, zumindest gegen die glibc.
Aber warum denn? Plattenplatz ist doch billig?
Ja, hauptsächlich der Plattenplatz. Aber dynamische Bibliotheken haben ja auf Vorteile bei der Belegung von Hauptspeicher. Philipp