Si desea asegurarse de que la biblioteca esté cargada si y solo si el programa lunar-calendar-gtk
se lanza, puede aplicar esto:
Establece la variable de entorno por comando anteponiendo el comando con ella:
$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$
Luego puede elegir poner esto en un script de shell y hacer lunar-calendar-gtk
un enlace simbólico a este script de shell, reemplazando la referencia original. Esto asegura efectivamente que la biblioteca se carga cada vez que se ejecuta la aplicación original.
Tendrás que renombrar el lunar-calendar-gtk
original a otra cosa, lo que podría no ser demasiado intrigante, ya que posiblemente cause problemas con la desinstalación y la actualización. Sin embargo, lo encontré útil con una versión anterior de Skype.
Gracias por las respuestas. Creo que he resuelto el problema justo ahora.
Dado que LD_PRELOAD es para configurar alguna biblioteca proloaded, verifico la biblioteca que ld precarga con LD_PRELOAD, una de las cuales es "liblunar-calendar-preload.so", que no existe en la ruta "/usr/lib/liblunar-calendar- preload.so", pero encuentro una biblioteca similar "liblunar-calendar-preload-2.0.so", que es una versión diferente de la anterior.
Entonces supongo que tal vez liblunar-calendar-preload.so se actualizó a una versión 2.0 cuando el sistema se actualizó, dejando LD_PRELOAD como "/usr/lib/liblunar-calendar-preload.so". Por lo tanto, el nombre de la biblioteca de precarga no se actualizó a la versión más reciente.
Para evitar cambiar la variable de entorno, creo un enlace simbólico en la ruta "/usr/lib"
sudo ln -s liblunar-calendar-preload-2.0.so liblunar-calendar-preload.so
Luego reinicio bash, el error desapareció.
El enlazador tiene en cuenta algunas variables de entorno. uno es LD_PRELOAD
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.
Por lo tanto, el enlazador intentará cargar las bibliotecas enumeradas en el LD_PRELOAD
variable antes de que se carguen otras.
¿Cuál podría ser el caso de que dentro de la variable se enumere una biblioteca que no se puede cargar previamente? mira dentro de tu .bashrc
o .bash_profile
entorno donde el LD_PRELOAD
está configurado y elimine esa biblioteca de la variable.