Es gibt eine Liste häufiger Fehler, die ich oft in Ubuntu sehe. Es gibt ein
Einer dieser häufigen Fehler, den ich oft sehe, wenn ich ein Programm aus seinem Quellcode installiere, ist
Fehler beim Laden gemeinsam genutzter Bibliotheken:
Datei mit gemeinsam genutzten Objekten kann nicht geöffnet werden:Datei oder Verzeichnis nicht vorhanden
Ich habe zum Beispiel versucht, den FreeRADIUS-Server zu verwenden, und es wurde mir dieser Fehler angezeigt:
radiusd : error while loading shared libraries:libfreeradius -radius-2.1.10.so:
cannot open shared object file: No such file or directory
Der Grund für diesen Fehler ist, dass die Bibliotheken des Programms an einem Ort installiert wurden, an dem der dynamische Linker sie nicht finden kann.
Lassen Sie mich Ihnen zeigen, wie Sie dieses Problem beheben können.
Korrektur Fehlermeldung „Datei mit gemeinsam genutzten Objekten kann nicht geöffnet werden:Datei oder Verzeichnis nicht vorhanden“
Eine schnelle Möglichkeit, diesen „Fehler beim Laden gemeinsam genutzter Bibliotheken“ automatisch zu beheben, ist die Verwendung von ldconfig.
Sie müssen lediglich das Terminal öffnen (Strg+Alt+T) und den folgenden Befehl eingeben:
sudo /sbin/ldconfig -v
Dieser eine Liner sollte das Problem in den meisten Fällen lösen. Wenn dies jedoch nicht der Fall ist, habe ich eine andere Methode zur Behandlung dieses Fehlers besprochen. Aber vorher möchte ich Ihnen sagen, was der obige Befehl bewirkt.
Was sind Shared-Object-Dateien? Wie behebt der obige Befehl das Problem?
Sie sehen, in C/C++ ist ein .so (Shared Object) eine kompilierte Bibliotheksdatei. Es wird gemeinsam genutztes Objekt genannt, weil diese Bibliotheksdatei von mehreren Programmen gemeinsam genutzt werden kann. Diese generierten Bibliotheken befinden sich normalerweise in den Verzeichnissen /lib oder /usr/lib.
Wenn Sie sich nun fragen, wie dieser winzige Befehl dieses Problem behoben hat, sollten Sie die Manpage von
ldconfig erstellt die notwendigen Links und den Cache zu den neuesten gemeinsam genutzten Bibliotheken, die in den Verzeichnissen gefunden werden, die auf der Befehlszeile in der Datei /etc/ld.so.conf angegeben sind , und in den vertrauenswürdigen Verzeichnissen (/lib und /usr/lib ). Der Cache wird vom Laufzeitlinker ld.so verwendet oder ld-linux.so . ldconfig überprüft den Header und die Dateinamen der Bibliotheken, auf die es stößt, wenn es feststellt, für welche Versionen die Links aktualisiert werden sollen.
Ich hoffe, diese schnelle Lösung hilft Ihnen dabei, den lästigen Fehler beim Laden der Meldung zu gemeinsam genutzten Bibliotheken zu beseitigen in Ubuntu und anderen Linux.
Wenn nicht, können Sie nachforschen und versuchen, das Problem so zu beheben, wie es im nächsten Abschnitt beschrieben wird.
Alternative Methode zur Behebung des Fehlers „Datei mit gemeinsam genutzten Objekten kann nicht geöffnet werden“
Die oben beschriebene Methode behebt das Problem, wenn die betreffende Bibliothek in Ihrem System verfügbar ist. Aber das muss nicht immer der Fall sein.
Wenn Sie das Programm nicht auf Ihrem System installiert haben, haben Sie keine Bibliotheksdatei. Die ldconfig kann nichts tun, wenn es überhaupt keine Bibliotheksdatei gibt.
Die alternative Methode besteht also darin, das erforderliche Programm zu installieren, und es sollte die Bibliothek automatisch erstellen.
Lassen Sie es mich Ihnen an einem Beispiel zeigen. Angenommen, Sie sehen diesen Fehler:
error while loading shared libraries: libgobject-2.0.so.0: cannot open shared object file: No such file or directory
Das Problem liegt bei libgobject Version 2.0. Die Versionsnummer ist wichtig, da einige Programme von einer bestimmten Version der Bibliothek abhängen und sich darüber beschweren, wenn sie sie nicht finden.
Jetzt bietet apt die Suchoption, die zum Suchen eines Pakets und zum Ermitteln seiner Version vor der Installation verwendet werden kann.
[email protected]:~$ apt search libgobject
Sorting... Done
Full Text Search... Done
librust-gobject-sys-dev/focal 0.9.0-2 amd64
FFI bindings to libgobject-2.0 - Rust source code
Nun, dieses librust-gobject-sys-dev-Paket könnte das sein, was Sie brauchen, wenn Sie wissen, dass Sie versucht haben, ein Rust-Programm auszuführen. Aber was wäre, wenn es ein Python-Programm wäre, das Sie ausgeführt haben und das sich darüber beschwert hat?
Sie können Ihre Suche erweitern, indem Sie während der Suche die Bibliothek aus dem Paketnamen entfernen. Die lib bedeutet Bibliothek und Bibliotheken können von einem generischen Paket bereitgestellt werden, das gobject-xyz heißen könnte.
Es wäre eine gute Idee, nach der Zeichenfolge im Namen des Pakets (anstelle der Beschreibung) zu suchen, um präzisere Ergebnisse zu erhalten.
[email protected]:~$ apt search --names-only gobject
Sorting... Done
Full Text Search... Done
gobject-introspection/focal-updates 1.64.1-1~ubuntu20.04.1 amd64
Generate interface introspection data for GObject libraries
libavahi-gobject-dev/focal 0.7-4ubuntu7 amd64
Development headers for the Avahi GObject library
libavahi-gobject0/focal 0.7-4ubuntu7 amd64
Avahi GObject library
libcairo-gobject-perl/focal,now 1.005-2 amd64 [installed,automatic]
integrate Cairo into the Glib type system in Perl
libcairo-gobject2/focal,now 1.16.0-4ubuntu1 amd64 [installed,automatic]
Cairo 2D vector graphics library (GObject library)
libghc-gi-gobject-dev/focal 2.0.19-1build1 amd64
GObject bindings
libghc-gi-gobject-doc/focal,focal 2.0.19-1build1 all
GObject bindings; documentation
In der obigen abgeschnittenen Ausgabe müssen Sie sehen, ob das Paket mit dem ursprünglichen Programm zusammenhängt, das Sie ausführen wollten. Sie müssen auch die Version der bereitgestellten Bibliothek überprüfen.
Sobald Sie das richtige Paket identifiziert haben, installieren Sie es wie folgt:
sudo apt install package_name
Nach der Installation können Sie den Befehl ldconfig erneut ausführen, um den Cache zu aktualisieren:
sudo /sbin/ldconfig -v
Diese Methode erfordert etwas Aufwand auf Ihrer Seite, aber so werden die Abhängigkeiten gehandhabt.
Nichts funktioniert, was nun?
Wenn Sie unglücklich genug sind, funktionieren die oben genannten Methoden möglicherweise nicht für Sie. Was können Sie tun?
Denken Sie zunächst daran, dass die gemeinsam genutzten Bibliotheken in einigen Fällen von anderen Paketen verwendet werden können. Wenn Sie versucht haben, das XYZ-Programm auszuführen und das ABC-Programm die richtige Version der gemeinsam genutzten Bibliothek installiert, funktioniert es möglicherweise (oder auch nicht) für Sie. Sie können es versuchen.
Zweitens, wenn Sie versuchen, ein Programm auszuführen, das zu alt oder zu neu ist, ist möglicherweise eine Bibliotheksversion erforderlich, die für Ihre Linux-Distribution nicht verfügbar ist.
Was Sie tun können, ist zu prüfen, ob Sie eine andere Version des Programms verwenden können. Verwenden Sie beispielsweise Eclipse Version 3 anstelle von Version 4. Dies kann in Ihrem Fall hilfreich sein.
Die andere Möglichkeit wäre, die Entwickler-Website oder Foren zu überprüfen und zu sehen, ob Sie die richtige Version der Bibliothek manuell aus ihrem Quellcode installieren können. Das erfordert viel Aufwand (im Jahr 2020), aber Sie haben nicht viele Möglichkeiten.
Hat es bei dir funktioniert?
Ich hoffe, ich habe die Dinge für Sie etwas klarer gemacht. Konnten Sie das Problem der gemeinsam genutzten Bibliotheken in Ihrem System beheben? Wenn Sie Fragen oder Anregungen haben, können Sie gerne einen Kommentar hinterlassen. Ciao :)