Va bene (o no) biblioteche symlink per superare gli errori "impossibile aprire l'oggetto condiviso"?


12

A volte, per una ragione o per l'altra, un programma non ha specificato o incluso correttamente tutte le sue dipendenze, e avviarlo provoca errori che indicano dipendenze mancanti. Un errore tipico è qualcosa del tipo:

cannot open shared object libudev.so.0

Vedo molte risposte che consigliano alle persone di aggirare tali problemi creando collegamenti simbolici /usr/libo in altre posizioni del sistema, e questo sembra spesso risolvere il problema. Ma vedo un numero uguale di commenti che avvisano le persone che è una cattiva idea. Ecco una risposta rappresentativa.

In quali circostanze è accettabile collegare in modo simbolico una libreria per far funzionare un programma? Mai? A volte? Cosa succede se si elimina il collegamento simbolico al termine dell'esecuzione del programma?

Quali sono le conseguenze nel fare questo?

Risposte:


12

Il problema con la creazione di questi collegamenti è che non sono gestiti in modo significativo. Se tale libreria viene rimossa, il collegamento si interrompe. Se la libreria viene aggiornata, potrebbe verificarsi un errore a causa del collegamento che non prevede di essere lì.

Inoltre, stai essenzialmente mentendo al sistema. Nell'esempio collegato, stai fingendo che libudev.so.1sia effettivamente libudev.so.0. Sono chiamati in modo diverso per un motivo (versioni diverse della libreria). Anche se questo potrebbe funzionare bene per alcuni programmi, esiste il potenziale che differenze tra le versioni possano causare problemi (come un comportamento segreto o altri comportamenti imprevisti).

Quindi, se stai creando questo link in modo specifico solo per l'esecuzione di un programma e sai che lo rimuoverai in seguito, risolverai il primo problema ma non il secondo. Sebbene questo risolva il problema principale, non è l'ideale.

La soluzione ideale è ovviamente installare la versione corretta della libreria (la risposta accettata nel tuo esempio collegato) o compilare il programma con la versione che hai.

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.