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/lib
dort, wo sie sein sollten. Um zu bestätigen, ldconfig
dass 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, ldconfig
wo die Bibliotheken zu finden sind. Sie können entweder einen symbolischen Link von /usr/lib
zu den entsprechenden Dateien in setzen /usr/local/lib
oder direkt angeben, ldconfig
dort 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 strace
es installiert, denn das wird Ihr nächstes Tool sein, um herauszufinden, wo nach libcurl
Dateien gesucht wird.
strace -e open -o strace.log $(which pacman)
Nachdem Sie dies ausgeführt haben, less strace.log
sehen 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/lib
wo 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)