Arch: Pacman kann nicht verwendet werden: Fehler beim Laden gemeinsam genutzter Bibliotheken

Arch: Pacman kann nicht verwendet werden: Fehler beim Laden gemeinsam genutzter Bibliotheken

Ich habe gerade die Installation von Arch und die Einrichtung meiner drahtlosen Verbindung abgeschlossen. Ich wollte zusätzliche Pakete installieren und habe es deshalb mit Pacman versucht.

Aber bei jedem Befehl, den ich verwende, erhalte ich die folgende Fehlermeldung:

pacman: Fehler beim Laden gemeinsam genutzter Bibliotheken: libcurl.so.4: Gemeinsam genutzte Objektdatei kann nicht geöffnet werden: Keine solche Datei oder Bibliothek.

Aber in /usr/local/lib habe ich die folgenden Dateien/Ordner:

libcurl.a libcurl.a libcurl.so libcurl.so.4 libcurl.so.4.2.o pkgconfig

Wie weise ich Pacman auf diese Dateien hin?

Antwort1

Ich bin mir nicht sicher, warum Ihre libcurl.*Dateien in sind /usr/local/lib, aber meine sind /usr/libdort, wo sie sein sollten. Um zu bestätigen, ldconfigdass sie nicht gefunden werden, verwenden Sie

ldconfig -p | grep curl

Es sollte nichts gedruckt werden. Wenn doch, überprüfen Sie die Versionsnummer. Möglicherweise haben Sie die falsche Version erhalten.

Um dies zu beheben, müssen Sie angeben, ldconfigwo die Bibliotheken zu finden sind. Sie können entweder einen symbolischen Link von /usr/libzu den entsprechenden Dateien in setzen /usr/local/liboder direkt angeben, ldconfigdort zu suchen:

echo /usr/local/lib | sudo tee -a /etc/ld.so.conf.d/local.conf

Führen Sie es dann aus sudo ldconfig, um den Cache zu aktualisieren.

Und versuchen Sie vielleicht herauszufinden, warum sich Ihre Bibliotheken im falschen Verzeichnis befinden.

Antwort2

Sie müssen herausfinden, wo es sucht libcurl(und es nicht findet), da es offensichtlich nicht prüft /usr/local/lib. Zunächst empfehle ich, ldd dagegen auszuführen, um zu sehen, ob andere Bibliotheken fehlen:

ldd $(which pacman)

Ich hoffe, Sie haben stracees installiert, denn das wird Ihr nächstes Tool sein, um herauszufinden, wo nach libcurlDateien gesucht wird.

strace  -e open -o strace.log $(which pacman)

Nachdem Sie dies ausgeführt haben, less strace.logsehen Sie, welche Dateien es zu öffnen versucht hat. So können Sie feststellen, wo es danach sucht. Eine schnelle und einfache Lösung wäre, die entsprechenden Dateien von dort zu kopieren (oder einen symbolischen Link dafür zu erstellen), /usr/local/libwo es danach sucht.

Folgendes habe ich beim Strace'd erhalten wget:

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libidn.so.11", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/etc/wgetrc", O_RDONLY)           = 3
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/share/locale/\"en_US/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/\"en/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/\"en_US/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/\"en/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en\"/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en\"/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)

verwandte Informationen