È normale che la variabile LD_LIBRARY_PATH non sia presente in un ambiente?


15

Ho scoperto per coincidenza che sulla mia Debian Jessie non esiste alcuna LD_LIBRARY_PATHvariabile (per l'esattezza printenv | grep LDnon mostra nulla di correlato al linker e echo "$LD_LIBRARY_PATH"mostra anche nulla).

Questo è il caso dell'emulatore del terminale x ( che potrebbe cancellarlo a causa di setgid ) e del terminale di base ( Ctrl+Alt+F1).

So che LD_LIBRARY_PATH può essere considerato male, quindi Debian può bloccarlo in qualche modo, ma d'altra parte ci sono alcuni file /etc/ld.so.conf.d/che contengono alcune directory a cui aggiungere LD_LIBRARY_PATH. Nessuno dei miei file rc (di cui sono a conoscenza) fa casino con LD_LIBRARY_PATHnessuno dei due.

Perché non vedo una LD_LIBRARY_PATHvariabile?

Risposte:


22

Sì, è normale che tu non abbia alcun esplicito LD_LIBRARY_PATH. Leggi anche ldconfig (8) e ld-linux (8) e informazioni sul percorso . Si noti che gli ldconfigaggiornamenti /etc/ld.so.cache, non il LD_LIBRARY_PATH. A volte imposterai esplicitamente il percorso di un eseguibile con la -Wl,-rpath,directory passata gccal momento del collegamento.

Se hai bisogno di un LD_LIBRARY_PATH(ma probabilmente non dovresti), impostalo tu stesso (es ~/.bashrc. In).

Se avete bisogno di impostazioni a livello di sistema, si potrebbe ad esempio considerare l'aggiunta /usr/local/lib/in /etc/ld.so.confed eseguire ldconfigdopo l'installazione di ogni biblioteca lì.

AFAIK $LD_LIBRARY_PATHviene utilizzato solo dal linker dinamico ld-linux.so(e da dlopen (3) che lo utilizza) dopo execve (2) . Vedi anche ldd (1) .

Leggi Come scrivere le librerie condivise di Drepper per ulteriori informazioni.


È stato un mio errore, ho pensato che LD_LIBRARY_PATH è il prodotto della corsa ldconfig. Nel frattempo è l' input di ldconfig insieme ai file in /etc/ld.so.conf.
calavera.info,

1
La mia sensazione è che ldconfignon usi $LD_LIBRARY_PATH(che viene usato solo alla ld-linux.sovolta)
Basile Starynkevitch,

3
@ calavera.info non è né. Il linker dinamico utilizza LD_LIBRARY_PATH insieme all'output di ldconfigat runtime. ldconfigné utilizza né cambia LD_LIBRARY_PATH.
Hobbs,

Ora posso vedere che l'avevo completamente incasinato, probabilmente trascorrendo troppo tempo in Java, dove "classpath" è virtuale l'unica configurazione del collegamento dinamico. Ora sembra tutto chiaro, grazie mille.
calavera.info,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.