
Beim Untersuchen der C++-Binärdatei stelle ich fest, dass libstdc++.so.6
sie per Dyn-Link verknüpft ist mit libm.so.6
und libc.so.6
:
$ ldd /lib/x86_64-linux-gnu/libstdc++.so.6
linux-vdso.so.1 (0x00007ffcb737b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd3b2295000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd3b1c00000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd3b2396000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd3b2275000)
Meine Fragen sind:
Was bedeutet
6
der Name? Ich dachte ursprünglich, es wäre die Version von glibc, aber die Version ist2.35
, was für nicht relevant ist6
.$ strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_2.3 GLIBC_2.3 ... GLIBC_2.35
Warum ist das Suffix
6
so beliebt?Gibt es einen Zeitplan für
libc.so.7
die Veröffentlichung?
Antwort1
Das Suffix 6 wird aus historischen Gründen verwendet, ausführlich beschrieben inman libc
unter Linux. Im Wesentlichen wurde unter Linux ein Fork der GNU C-Bibliothek verwendet; dieser veröffentlichte die Hauptversionen 2 bis 5. Version 5 verwendete ELF und wurde mit dem Soname der gemeinsam genutzten Bibliothek veröffentlicht libc.so.5
. Als Version 2 der GNU C-Bibliothek unter Linux veröffentlicht wurde, verwendete sie den Soname der gemeinsam genutzten Bibliothek, libc.so.6
um Verwechslungen mit früheren Bibliotheken zu vermeiden.
Verwandte Bibliotheken verwenden dasselbe Suffix. Einige Architekturen verwenden ein leicht anderes Suffix. Die GNU C-Bibliothek auf Alpha und Itanium lautet beispielsweise libc.so.6.1
.
Die GNU C-Bibliothek ist seit jeher abwärtskompatibel und verwendet viele verschiedene Mechanismen, um die Einführung bedeutender Änderungen zu unterstützen, ohne alte Binärdateien (einschließlich versionierter Symbole) zu beschädigen. Ein neuer Soname ( libc.so.7
) würde nur verwendet, wenn eine nicht abmilderbare, schwerwiegende Änderung unbedingt erforderlich wäre. Daher ist es unwahrscheinlich, dass wir in naher Zukunft einen solchen sehen werden.
Antwort2
Es ist das ABI (Binäre Anwendungsschnittstelle) Ausführung.
Es wird nur erhöht, wenn eine bahnbrechende Änderung vorgenommen wird, die jetzt dringend vermieden wird , da die meisten Distributionen bereits seit einiger Zeit libc
aktiviert sind .libc.so.6
Im Allgemeinen können mehrere inkompatible Versionen einer Bibliothek gleichzeitig auf einem System vorhanden sein und unterschiedliche Anwendungen unterstützen, die für die unterschiedlichen Versionen erstellt wurden.
Beispielsweise stellte Ubuntu 18.04 libcurl.so.3
(über das Paket libcurl3
) und libcurl.so.4
(über das Paket libcurl4
) bereit, die beide auf der Grundlage von cURL Version 7.58.0 erstellt wurden.