Was ist der Unterschied zwischen /lib/i386-linux-gnu/libc.so.6, /lib/x86_64-linux-gnu/libc.so.6 und /usr/lib/x86_64-linux-gnu/libc.so?
Installierte ich Matlab auf meinem Linux Mint 14 Nadia (ein uname -a zeigt: Linux-Ideapad-Z570 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux) und beim Aufruf von der Kommandozeile aus, ich würde eine: "/lib64/libc.so wurde nicht gefunden".
Folgte ich dem helfen auf mathworks, indem Sie einen link in /lib64 als:
ln -s /lib/x86_64-linux-gnu/libc.so.6 .
Dass das Thema gelöst.
Nun, wenn ich den einen suchen, der diese Bibliothek, die ich bekommen:
locate "libc.so"
/lib/i386-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libc.so.6
/usr/lib/x86_64-linux-gnu/libc.so
Werde ich das kompilieren mit gcc in diesem computer, und ich möchte, um die volle 64-bit-Zusammenstellungen. Was bedeutet genau bedeuten, haben alle diese verschiedenen libc.also Bibliotheken? was wird der gnu-compiler verwenden? muss ich irgendetwas anderes zu tun mit gcc zu kompilieren für 64 bit?
Ich würde auch gerne optimieren, so viel wie ich kann für meinen neuen i7 core!!!
- user1889975, Hi. Sind Sie sicher, dass alle 3
libc.so
s unterschiedlich sind? Einels -l
dann zu finden symlinks. Auch gab es eine änderung vor kurzem in den Standard-Pfad für 32/64bit libs auf gemischte 32/64 bit-Systemen (ab/lib64
zu/lib/tr-ip-le/
), prüfen Sie diese Seite für zusätzliche Informationen wiki.debian.org/Multiarch/TheCaseForMultiarch - Ich habe überprüfen und Sie sind KEINE symlinks. Danke für die Anregung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein 32-bit-version der Bibliothek.
Dies ist die 64-bit-version der Bibliothek.
Beide sind in der Regel symbolische links auf die eigentlichen library-Datei, die in der Regel nach dem glibc-release-Nummer, zum Beispiel
libc-2.15.so
Dies ist keine Bibliothek, sondern ein linker-Skript-Datei, die sich auf die oben genannten symlinks.
Warum brauchen wir alle diese:
Ersten, unabhängig von libc-version installiert ist, wird der linker immer suchen
libc.so
, weil der compiler-Treiber werden immer übergeben, um den linker die-lc
Optionen. Der namelibc
bleibt die gleiche, und bezeichnet, um die neueste version der Bibliothek.Den symlinks
libc.so.6
sind benannt nach den soname der Bibliothek, die, mehr oder weniger entspricht, um die ABI-version der Bibliothek. Die ausführbaren Dateien gelinkt gegenlibc.so
in der Tat enthalten, die runtime-Abhängigkeiten auflibc.so.6
.Wenn wir uns vorstellen, dass eines Tages ein grob ABI inkompatiblen libc ist veröffentlicht, es ist soname bezeichnet werden können
libc.so.7
, zum Beispiel, und diese version coukld koexistiert mit der älterenlibc.so.6
version, also die ausführbaren Dateien gelinkt gegen die eine oder die andere können parallel auf dem gleichen system,Und schließlich der name
libc-2.15.so
bezieht sich auf die libc-Version, wenn Sie installieren eine neue libc-Paket, den Namen ändern zulibc-2.16.so
. Vorausgesetzt, es ist Binär-kompatibel mit der vorherigen Version, dielibc.so.6
link bleiben wird benannt, dass die Art und Weise und die vorhandenen Programme weiter zu arbeiten..so
? Das ist verwirrend.Finden, welche Sie benutzen, müssen Sie zuerst suchen Sie die Bestellung, die
ld
(der linker) verwendet, um zu finden, Bibliotheken, etwa so:Für mich, es gab mir diese Ausgabe:
Dies bedeutet, dass auf meinem Rechner
ld
sieht in diese Verzeichnisse in der Reihenfolge:Also, wenn libc war in /usr/x86_64-unknown-linux-gnu/lib64, und libc war auch in /usr/lib, würde es die /usr/x86_64-unknown-linux-gnu/lib64-version, weil es war zuerst aufgeführt.
locate ...
(/lib/i386...) ist die 32-bit version der libc (benötigt für die Ausführung von 32-bit-Anwendungen), der zweite Eintrag (/lib/x86_64...) ist die 64-bit version der libc, und der Dritte Eintrag ist ein symbolischer Link auf die zweite. Ich bin mir nicht ganz sicher, warum der symlink erstellt, aber ich denke es hat etwas zu tun mit der Kompatibilität mit anderen Programmen oder Compilern.Den symlink Sie erstellt werden, haben keinerlei Auswirkung auf GCC. Die 32-bit-version wird nur verwendet, wenn Sie kompilieren Sie mit der
-m32
GCC-flag. GCC wird nicht versuchen, erzeugen von 32-bit-Binärdateien, sofern Sie nicht explizit sagen, dass es zu (durch die Verwendung dieser Flagge.)