Si vous voulez vous assurer que la bibliothèque est chargée si et seulement si le programme lunar-calendar-gtk
est lancé, vous pouvez appliquer ceci :
Vous définissez la variable d'environnement par commande en préfixant la commande :
$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$
Vous pouvez alors choisir de mettre ceci dans un script shell et faire lunar-calendar-gtk
un lien symbolique vers ce script shell, remplaçant la référence d'origine. Cela garantit effectivement que la bibliothèque est chargée à chaque fois que l'application d'origine est exécutée.
Vous devrez renommer le lunar-calendar-gtk
d'origine à autre chose, ce qui n'est peut-être pas trop intrigant car cela peut entraîner des problèmes de désinstallation et de mise à niveau. Cependant, je l'ai trouvé utile avec une ancienne version de Skype.
Merci pour les réponses. Je pense avoir résolu le problème tout à l'heure.
Étant donné que LD_PRELOAD sert à définir certaines bibliothèques proloadées, je vérifie la bibliothèque que ld précharge avec LD_PRELOAD, dont l'une est "liblunar-calendar-preload.so", qui n'existe pas dans le chemin "/usr/lib/liblunar-calendar- preload.so", mais je trouve une bibliothèque similaire "liblunar-calendar-preload-2.0.so", qui est une version différente de la précédente.
Ensuite, je suppose que liblunar-calendar-preload.so a peut-être été mis à jour vers une version 2.0 lors de la mise à jour du système, laissant LD_PRELOAD rester à "/usr/lib/liblunar-calendar-preload.so". Ainsi, le nom de la bibliothèque de préchargement n'a pas été mis à jour vers la version la plus récente.
Pour éviter de changer de variable d'environnement, je crée un lien symbolique sous le chemin "/usr/lib"
sudo ln -s liblunar-calendar-preload-2.0.so liblunar-calendar-preload.so
Ensuite, je redémarre bash, l'erreur a disparu.
L'éditeur de liens prend en compte certaines variables d'environnement. un est LD_PRELOAD
à partir de 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.
Par conséquent, l'éditeur de liens essaiera de charger les bibliothèques répertoriées dans le LD_PRELOAD
variable avant que les autres ne soient chargées.
Qu'est-ce qui pourrait arriver qu'à l'intérieur de la variable soit répertoriée une bibliothèque qui ne peut pas être préchargée. regardez à l'intérieur de votre .bashrc
ou .bash_profile
environnement où le LD_PRELOAD
est définie et supprimez cette bibliothèque de la variable.