Ist es in Ordnung (oder nicht), Bibliotheken zu verknüpfen, um die Fehler zu beheben, dass gemeinsame Objekte nicht geöffnet werden können?


12

Manchmal hat ein Programm aus dem einen oder anderen Grund nicht alle Abhängigkeiten korrekt angegeben oder eingeschlossen, und der Start führt zu Fehlern, die auf fehlende Abhängigkeiten hinweisen. Ein typischer Fehler ist so etwas wie:

cannot open shared object libudev.so.0

Ich sehe viele Antworten, die den Leuten raten, solche Probleme zu umgehen, indem sie Symlinks in /usr/liboder an anderen Systemstandorten erstellen, und dies scheint das Problem häufig zu lösen. Aber ich sehe die gleiche Anzahl von Kommentaren, die die Leute darauf hinweisen, dass es eine schlechte Idee ist. Hier ist eine Antwort, die repräsentativ ist.

Unter welchen Umständen ist es akzeptabel, eine Bibliothek zu verknüpfen, damit ein Programm funktioniert? Noch nie? Manchmal? Was passiert, wenn Sie den Symlink löschen, nachdem Sie das Programm beendet haben?

Was sind die Konsequenzen davon?

Antworten:


12

Das Problem beim Erstellen dieser Links besteht darin, dass sie nicht auf sinnvolle Weise verwaltet werden. Wenn diese Bibliothek entfernt wird, wird die Verknüpfung unterbrochen. Wenn die Bibliothek aktualisiert wird, kann ein Fehler aufgrund des Links auftreten, von dem erwartet wird, dass er nicht vorhanden ist.

Außerdem lügen Sie im Wesentlichen das System an. Im verknüpften Beispiel geben Sie vor, dass dies libudev.so.1tatsächlich der Fall ist libudev.so.0. Sie werden aus einem bestimmten Grund unterschiedlich benannt (verschiedene Versionen der Bibliothek). Während dies für einige Programme problemlos funktioniert, können Unterschiede zwischen den Versionen Probleme verursachen (z. B. Segfault oder anderes unerwartetes Verhalten).

Wenn Sie also diesen Link speziell erstellen, damit ein Programm ausgeführt wird und Sie wissen, dass Sie ihn später entfernen, beheben Sie das erste Problem, aber nicht das zweite. Hiermit wird zwar das Hauptproblem behoben, es ist jedoch nicht ideal.

Die ideale Lösung ist natürlich, die richtige Version der Bibliothek zu installieren (die akzeptierte Antwort in Ihrem verknüpften Beispiel) oder das Programm mit der von Ihnen verwendeten Version zu kompilieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.