Mailinglist Archive: opensuse-de (1951 mails)

< Previous Next >
Re: Mehrere GCC-Versionen
  • From: Philipp Thomas <philipp.thomas@xxxxxxxxx>
  • Date: Fri, 23 Dec 2005 14:03:31 +0100
  • Message-id: <e0snq1pdre123u7ibc86raosn91r3ei9el@xxxxxxx>
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

< Previous Next >
Follow Ups