Se vuoi assicurarti che la libreria sia caricata se e solo se il programma lunar-calendar-gtk
è stato lanciato, puoi applicare questo:
Si imposta la variabile d'ambiente per comando anteponendola al comando:
$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$
Puoi quindi scegliere di inserirlo in uno script di shell e creare lunar-calendar-gtk
un collegamento simbolico a questo script di shell, sostituendo il riferimento originale. Ciò assicura efficacemente che la libreria venga caricata ogni volta che viene eseguita l'applicazione originale.
Dovrai rinominare il lunar-calendar-gtk
originale a qualcos'altro, che potrebbe non essere troppo intrigante in quanto potrebbe causare problemi con la disinstallazione e l'aggiornamento. Tuttavia, l'ho trovato utile con una versione precedente di Skype.
Grazie per le risposte. Penso di aver risolto il problema solo ora.
Poiché LD_PRELOAD serve per impostare alcune librerie proloaded, controllo la libreria che ld precarica con LD_PRELOAD, una delle quali è "liblunar-calendar-preload.so", che non esiste nel percorso "/usr/lib/liblunar-calendar- preload.so", ma trovo una libreria simile "liblunar-calendar-preload-2.0.so", che è una versione diversa della precedente.
Quindi immagino che forse liblunar-calendar-preload.so sia stato aggiornato a una versione 2.0 quando il sistema è stato aggiornato, lasciando che LD_PRELOAD rimanga "/usr/lib/liblunar-calendar-preload.so". Pertanto, il nome della libreria di precaricamento non è stato aggiornato alla versione più recente.
Per evitare di modificare la variabile d'ambiente, creo un collegamento simbolico sotto il percorso "/usr/lib"
sudo ln -s liblunar-calendar-preload-2.0.so liblunar-calendar-preload.so
Quindi riavvio bash, l'errore è scomparso.
Il linker prende in considerazione alcune variabili di ambiente. uno è LD_PRELOAD
da 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.
Pertanto il linker tenterà di caricare le librerie elencate nel LD_PRELOAD
variabile prima che le altre vengano caricate.
Cosa potrebbe accadere che all'interno della variabile sia elencata una libreria che non può essere precaricata. guarda dentro il tuo .bashrc
o .bash_profile
ambiente in cui il file LD_PRELOAD
è impostato e rimuovi quella libreria dalla variabile.