Re: libc und libc_r in einem Programm

From: Bernd Walter <ticso(at)cicely12.cicely.de>
Date: Mon, 16 Jul 2007 11:11:56 +0200

On Mon, Jul 16, 2007 at 10:44:13AM +0200, Marc Santhoff wrote:
> Hallo,
>
> ich frage mich warum in einem Programm, daß mit "threading" übersetzt
> und gelinkt ist, beide Bibliotheken angesprochen werden, libs.so.x und
> libc_r.so.x:

Du meinst libc.so.x?

> $ ldd /usr/local/bin/h5dump
> /usr/local/bin/h5dump:
> libhdf5.so.0 => /usr/local/lib/libhdf5.so.0 (0x28089000)
> libz.so.2 => /usr/lib/libz.so.2 (0x2818c000)
> libm.so.2 => /usr/lib/libm.so.2 (0x28199000)
> libc_r.so.4 => /usr/lib/libc_r.so.4 (0x281b4000)
> libc.so.4 => /usr/lib/libc.so.4 (0x2826b000)
>
> Bis auf die Threading-spezifischen funktionen ist sind doch die Inhalte,
> also die aus Objektdateien eingebauten Funktionen, die selben. Nur
> diejenigen in libc_r sollten reentrant sein, die anderen nicht(?).

Die jeweiligen Symbole in der libc sind als "weak" deklariert und
werden von der libc_r oder vergleichbaren überschrieben.
Die nicht Thread spezifischen Funktionen der libc sind nicht in der
libc_r enthalten.

> Muß das so sein?

Ja.
Die libc_r ist kein Ersatz für die libc, sondern eine Ergänzung.

> Oder kann es dadurch Konflikte geben?

Nein, weil die libc durch die weak Defintion weniger Prio beim linken
hat.
Echte Kollisionen, also beide Libs haben die gleiche Funktione ohne
weak-deklaration, würde der ld.so melden.

> Wohlgemerkt, ich meine hiermit FreeBSD 4, unter 6 dürfte sich an der
> Stelle etwas getan haben (libtrhead vs. libthr o.ä.).

Es sind ein paar Libs hinzugekommen, die Symbole der libc mit anderem
Inhalt ersetzen, aber das Konzept des austauschens ist geblieben.

-- 
B.Walter                http://www.bwct.de      http://www.fizon.de
bernd(at)bwct.de           info(at)bwct.de            support(at)fizon.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 16 Jul 2007 - 11:13:11 CEST

search this site