¿Está bien (o no) enlazar bibliotecas de enlaces simbólicos para superar los errores de "no se puede abrir el objeto compartido"?

12

A veces, por una razón u otra, un programa no ha especificado o incluido todas sus dependencias correctamente, y al iniciarlo se producen errores que indican dependencias faltantes. Un error típico es algo como:

cannot open shared object libudev.so.0

Veo muchas respuestas que aconsejan a las personas que eviten tales problemas creando enlaces simbólicos en /usr/libotras ubicaciones del sistema, y ​​esto a menudo parece resolver el problema. Pero veo un número igual de comentarios advirtiendo a la gente que es una mala idea. Aquí hay una respuesta que es representativa.

¿En qué circunstancias es aceptable vincular una biblioteca para que un programa funcione? ¿Nunca? ¿A veces? ¿Qué pasa si eliminas el enlace simbólico después de terminar de ejecutar el programa?

¿Cuáles son las consecuencias de hacer esto?

John Feminella
fuente

Respuestas:

12

El problema con la creación de estos enlaces es que no se gestionan de manera significativa. Si se elimina esa biblioteca, el enlace se rompe. Si la biblioteca se actualiza, puede encontrar un error debido al enlace que no espera que esté allí.

Además, esencialmente estás mintiendo al sistema. En el ejemplo vinculado, estás fingiendo que libudev.so.1es así libudev.so.0. Se nombran de manera diferente por una razón (diferentes versiones de la biblioteca). Si bien esto puede funcionar bien para algunos programas, existe la posibilidad de que las diferencias entre las versiones puedan causar problemas (como una falla de seguridad u otro comportamiento inesperado).

Entonces, si está creando específicamente este enlace solo para que se ejecute un programa y sepa que lo eliminará más adelante, abordará el primer problema pero no el segundo. Si bien esto aborda el problema principal, no es lo ideal.

La solución ideal es, por supuesto, instalar la versión correcta de la biblioteca (la respuesta aceptada en su ejemplo vinculado), o compilar el programa con la versión que tiene.

Nattgew
fuente