LD_LIBRARY_PATH sempre vuoto dopo sudo


9

Ricevo errori di libreria condivisa ogni volta che mi sembra di installare il software manualmente. Al momento dell'esecuzione echo $LD_LIBRARY_PATHsi presenta come ... niente . Ho provato ad aggiungere /usr/local/liba un .conffile /etc/ld.so.conf.dma sembra che non venga mai eseguito.

Non funziona (citazioni o altro):

LD_LIBRARY_PATH="/usr/local/lib"
export LD_LIBRARY_PATH
sudo ldconfig -v

Il valore verrà impostato temporaneamente, ma non manterrà il valore se esco da una finestra del terminale. Anche il riavvio non fa nulla.


Prova ad aggiungerlo a~/.bashrc
Kevdog777 il


Non è un duplicato; la domanda è irrilevante e la risposta non funziona.
Dissident Rage,


1
Sì, lasciami usare un software rotto di un anno fa invece di consentirmi di aggiornarlo per verificare se qualcosa è cambiato in meglio.
Dissident Rage,

Risposte:


7

Aggiungi quanto segue al tuo .bashrc:

vim ~/.bashrc

...
export LD_LIBRARY_PATH=/usr/local/lib

Ciò ti consentirà di riavviare il computer e di assegnare comunque quel percorso.


2
Va bene per un utente. Che dire di tutti gli utenti?
Dissident Rage,

2
@DissidentRage: aggiungi lo stesso a /etc/bash.bashrc
JdeHaan,

Lo segnerò come risposta perché funziona per l'ambito dato. Cosa posso fare con i file che chiaramente non vengono eseguiti /etc/ld.so.conf.d?
Dissident Rage,

1

Su Red Hat Enterprise Linux (RHEL) 6, /etc/ld.so.confcontiene include ld.so.conf.d/*.conf. Senza questa riga, gli elementi in /etc/ld.so.conf.d/*.confnon verrebbero mai analizzati.

Per vedere quali librerie / directory ldconfigstanno analizzando

ldconfig -v 

Stampa il numero della versione corrente, il nome di ciascuna directory durante la scansione e tutti i collegamenti creati.


Sì, ho controllato /etc/ld.so.confprima perché ero curioso di cosa contenesse. Aveva la includelinea.
Dissident Rage,

L'esecuzione ldconfig -vpotrebbe darti un'idea del perché la libreria non viene inclusa. È possibile eseguire ldconfig -pper stampare le librerie e le directory presenti nel file di cache corrente.
Pyther,

0

Alla fine l'ho risolto con un alias:

alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'

Assicurarsi di utilizzare virgolette singole, in modo che le variabili vengano espanse al momento dell'invocazione, non al momento in cui viene definito l'alias.

Questo:

  • conserva HOME (che altrimenti viene impostato su / root)
  • preserva PERCORSO (che altrimenti viene impostato su un percorso "sicuro" in Suders)
  • conserva il valore corrente di LD_LIBRARY_PATH (che altrimenti viene oscurato)

(Puoi vedere a cosa vengono impostate le cose con sudo bash -c "echo $HOME":)

Sto lavorando con driver personalizzati e devo sempre eseguire i miei programmi di test per accedere al driver. Non desidero installare versioni di test delle librerie nell'area di sistema, quindi utilizzo LD_LIBRARY_PATH per configurare una directory di test specifica, se necessario. Non posso semplicemente impostare un LD_LIBRARY_PATH fisso, devo essere in grado di cambiarlo e mantenere l'impostazione corrente. Preservare PATH e HOME mi dà accesso al mio ambiente di lavoro - script e struttura delle directory.

Questo alias evita di dover concedere permessi generalizzati nei sudoer ... e apparentemente non ci sono soluzioni alternative per LD_LIBRARY_PATH indipendentemente dalle impostazioni dei sudoer. Non funziona sudo all'interno degli script, ma questi possono essere codificati secondo necessità.

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.