On 06/16/2023 19:09, Stefan Reuther wrote:
> Am 16.06.2023 um 17:44 schrieb Helmut Schellong:
>> On 06/16/2023 14:16, Enrik Berkhan wrote:
>>> Helmut Schellong <
r...@schellong.biz> wrote:
>>>> Im C-Standard ist das Wort 'Library' ungefähr 500-mal enthalten.
>>>> Der Standard beschreibt sogar konkret vorherige Translationsphasen
>>>> mit Hilfe
>>>> von Einzelobjekten oder zusammengefaßt in Libraries, um schließlich
>>>> eine ausführbare Datei produziert zu haben, per externem Linken.
>>>
>>> Und was steht da zu shared objects? In deinem Ursprungsposting ging es
>>> WIMRE um eine libc++.so.1. Das ist keine Library.
>>
>> Das ist irrelevant. Der Standard nennt selbstverständlich nicht den
>> Namen 'libc++.so.1', sondern er beschreibt allgemein, wie ich es oben
>> schrieb.
>
> Der Standard bezeichnet als "Library" eine Menge von Funktionen u.a.,
> die "linked" werden können.
Ja, das ist der weit überwiegende Teil.
> Er trifft keine Aussage darüber, wie diese
> Library physisch abgelegt ist, ob das Objektdateien sind, Archive (*.a,
> *.lib) oder Shared Libraries (*.so, *.dll), oder ob der Übersetzer sie
> einfach bei Bedarf direkt einsetzt.
Doch, er trifft hierzu Aussagen, wie ich es schrieb.
5.1.1.1 - Aus einem Draft für C23:
A C program need not all be translated at the same time. The text of the program is kept in units
called source files, (or preprocessing files) in this document. A source file together with all the headers
and source files included via the preprocessing directive #include is known as a preprocessing
translation unit. After preprocessing, a preprocessing translation unit is called a translation unit.
Previously translated translation units may be preserved individually or in libraries. The separate
translation units of a program communicate by (for example) calls to functions whose identifiers have
external linkage, manipulation of objects whose identifiers have external linkage, or manipulation
of data files. Translation units may be separately translated and then later linked to produce an
executable program.
Beispielsweise: "units may be preserved individually or in libraries".
Damit sind beispielsweise foo.o und libfu.a gemeint.
> Und schon gar nicht trifft er eine Aussage darüber, was der Name
> "libc++.so.1" bedeutet.
>
>>> Um "konzeptionell fehlerhaftes Verhalten" aufzeigen zu können, sollte
>>> man das Konzept zuvor verstanden haben.
>>
>> Richtig - ich habe das verstanden, schon in den 1980ern.
>
> Die Welt dreht sich weiter.
>
>> /lib:/usr/lib:/usr/lib/compat:/usr/local/lib:...
>>
>> Vorstehend der Suchpfad für Libraries.
>> Alle Verlinkungen 'libc++' wurden per /usr/lib/libc++.so.1 vorgenommen.
>> Es gibt dann keinen Grund mehr, eine weitere libc++.so.1 in
>> /usr/local/lib zu öffnen.
>
> Zum einen ist deine Fehlerbeschreibung absolut konfus - sie sagt weder,
> welches Symbol bemeckert wurde, in welcher Library es zu finden gewesen
> wäre, und welche stattdessen benutzt wurde.
Doch, das habe ich gepostet.
Das Symbol 'FBSD_1.5' in /usr/local/lib/libc++.so.1 wurde als unbekannt angemeckert.
Ich schrieb das mehrfach (von Anfang an).
/usr/lib/libc++.so.1 (Symbol FBSD_1.3) wird nicht angemeckert.
> Zum anderen gibt es seit längerer Zeit nun schon die Möglichkeit, dass
> eine Library einen eigenen Suchpfad für weitere Libraries mitbringt, und
Das weiß ich auch schon lange, weil Fehlermeldungen entsprechend lauten.
Beispielsweise wird libc.so.7 gefordert.
Habe ich das erfüllt, wird etwas Fehlendes für ein Objekt _in_ dieser Lib gefordert.
Habe ich das erfüllt, wird eine falsche Relokationsart angemosert.
Und da hatte ich genug, und ließ diesen Ansatz fallen.
> dieser Suchpfad darf auch relativ sein (RPATH, RUNPATH, $ORIGIN). Weiß
> man natürlich nicht, wenn man seit 1985 nicht mehr in die Doku geschaut hat.
>
> Und schlussendlich ist der erste Schritt, sowas zu debuggen, das
> ldd-Kommando bzw. die LD_TRACE_LOADED_OBJECTS-Umgebungsvariable, ggf.
> noch in Verbindung mit LD_BIND_NOW.
>
> Mit C hat das aber alles nichts zu tun.
Ja, deshalb habe ich auch zu Werkzeugen, wie nm, objdump, etc., nichts gesagt.
Das läßt schließlich auch der Standard außen vor.
Grundlegende Konzepte nennt er aber doch.