Pokud se chcete ujistit, že se knihovna načte pokud a jen tehdy program lunar-calendar-gtk
je spuštěn, můžete použít toto:
Proměnnou prostředí na příkaz nastavíte tak, že před příkaz přidáte předponu:
$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$
Pak se můžete rozhodnout, že to vložíte do skriptu shellu a vytvoříte lunar-calendar-gtk
symbolický odkaz na tento skript shellu, který nahrazuje původní odkaz. To účinně zajišťuje, že se knihovna načte pokaždé, když je spuštěna původní aplikace.
Budete muset přejmenovat původní lunar-calendar-gtk
na něco jiného, co nemusí být příliš zajímavé, protože to může způsobit problémy s odinstalací a aktualizací. Zjistil jsem však, že je to užitečné s dřívější verzí Skype.
Díky za reakce. Myslím, že jsem problém právě vyřešil.
Vzhledem k tomu, že LD_PRELOAD slouží k nastavení některé knihovny proloaded, zkontroluji knihovnu, která se předem načte pomocí LD_PRELOAD, z nichž jedna je "liblunar-calendar-preload.so", která neexistuje v cestě "/usr/lib/liblunar-calendar- preload.so", ale našel jsem podobnou knihovnu "liblunar-calendar-preload-2.0.so", což je odlišná verze předchozí.
Pak si myslím, že možná byl liblunar-calendar-preload.so aktualizován na verzi 2.0, když se systém aktualizoval, takže LD_PRELOAD zůstalo "/usr/lib/liblunar-calendar-preload.so". Název knihovny předběžného načtení tedy nebyl aktualizován na nejnovější verzi.
Abych se vyhnul změně proměnné prostředí, vytvořím symbolický odkaz pod cestou "/usr/lib"
sudo ln -s liblunar-calendar-preload-2.0.so liblunar-calendar-preload.so
Poté restartuji bash, chyba je pryč.
Linker bere v úvahu některé proměnné prostředí. jedna je LD_PRELOAD
od 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.
Proto se linker pokusí načíst knihovny uvedené v LD_PRELOAD
před načtením ostatních.
Co by se mohlo stát, že uvnitř proměnné je uvedena knihovna, kterou nelze předem načíst. podívejte se do svého .bashrc
nebo .bash_profile
prostředí, kde je LD_PRELOAD
je nastavena a odeberte tuto knihovnu z proměnné.
-
Chyba Nelze najít OpenSSL [PHP Extension mysqlnd]
-
Rpm:Chyba při načítání sdílených knihoven:Libz.so.1:Nelze otevřít soubor sdíleného objektu:Žádný takový soubor
-
"chyba při načítání sdílených knihoven:libjli.so:nelze otevřít soubor sdíleného objektu:Žádný takový soubor nebo adresář" chyba "java -version" při spuštění