Wenn Sie sicherstellen möchten, dass die Bibliothek wenn und nur wenn geladen wird das Programm lunar-calendar-gtk
gestartet wird, können Sie Folgendes anwenden:
Sie setzen die Umgebungsvariable pro Befehl, indem Sie sie dem Befehl voranstellen:
$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$
Sie können dies dann in ein Shell-Skript einfügen und lunar-calendar-gtk
erstellen ein symbolischer Link zu diesem Shell-Skript, der die ursprüngliche Referenz ersetzt. Dadurch wird effektiv sichergestellt, dass die Bibliothek jedes Mal geladen wird, wenn die ursprüngliche Anwendung ausgeführt wird.
Sie müssen den ursprünglichen lunar-calendar-gtk
umbenennen zu etwas anderem, was möglicherweise nicht allzu faszinierend ist, da es möglicherweise Probleme bei der Deinstallation und Aktualisierung verursachen kann. Ich fand es jedoch mit einer früheren Version von Skype nützlich.
Danke für die Antworten. Ich glaube, ich habe das Problem gerade jetzt gelöst.
Da LD_PRELOAD zum Setzen einiger vorgeladener Bibliotheken dient, überprüfe ich die Bibliothek, die ld vorab lädt, mit LD_PRELOAD, von denen eine "liblunar-calendar-preload.so" ist, die nicht im Pfad "/usr/lib/liblunar-calendar- preload.so", aber ich finde eine ähnliche Bibliothek "liblunar-calendar-preload-2.0.so", die eine andere Version der vorherigen ist.
Dann schätze ich, dass liblunar-calendar-preload.so vielleicht auf eine 2.0-Version aktualisiert wurde, als das System aktualisiert wurde, sodass LD_PRELOAD "/usr/lib/liblunar-calendar-preload.so" bleibt. Daher wurde der Name der Preload-Bibliothek nicht auf die neueste Version aktualisiert.
Um eine Änderung der Umgebungsvariablen zu vermeiden, erstelle ich einen symbolischen Link unter dem Pfad "/usr/lib"
sudo ln -s liblunar-calendar-preload-2.0.so liblunar-calendar-preload.so
Dann starte ich bash neu, der Fehler ist weg.
Der Linker berücksichtigt einige Umgebungsvariablen. einer ist LD_PRELOAD
ab man 8 ld-linux
:
LD_PRELOAD
A whitespace-separated list of additional, user-specified, ELF
shared libraries to be loaded before all others. This can be
used to selectively override functions in other shared
libraries. For setuid/setgid ELF binaries, only libraries in
the standard search directories that are also setgid will be
loaded.
Daher wird der Linker versuchen, die in LD_PRELOAD
aufgelisteten Bibliotheken zu laden Variable, bevor andere geladen werden.
Was könnte der Fall sein, dass in der Variablen eine Bibliothek aufgeführt ist, die nicht vorgeladen werden kann? Schauen Sie in Ihren .bashrc
oder .bash_profile
Umgebung, in der der LD_PRELOAD
gesetzt ist und entfernen Sie diese Bibliothek aus der Variablen.