LD_LIBRARY_PATH siempre en blanco después de sudo

9

Recibo errores de biblioteca compartida cada vez que parezco instalar software manualmente. Al ejecutarlo echo $LD_LIBRARY_PATHaparece como ... nada . Intenté agregar /usr/local/liba un .confarchivo /etc/ld.so.conf.dpero parece que nunca se ejecuta.

Esto tampoco funciona (comillas u otros):

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

El valor se establecerá temporalmente, pero no retendrá el valor si salgo de una ventana de terminal. Reiniciar tampoco hace nada.

Ira disidente
fuente
Intente agregarlo a~/.bashrc
Kevdog777
No es un duplicado; La pregunta es irrelevante y la respuesta no funciona.
Disident Rage
1
Sí, permítame usar un software dañado de hace un año en lugar de permitirme actualizarlo para probar si algo ha cambiado para mejor.
Disage Rage

Respuestas:

7

Agregue lo siguiente a su .bashrc:

vim ~/.bashrc

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

Esto te permitirá reiniciar tu computadora y aún así tener esa ruta asignada.

Kevdog777
fuente
2
Eso está bien para un usuario. ¿Qué pasa con todos los usuarios?
Disident Rage
2
@DissidentRage: agregue lo mismo a /etc/bash.bashrc
JdeHaan
Voy a marcar esto como la respuesta porque esto funciona para el alcance dado. ¿Qué puedo hacer con los archivos que claramente no se están ejecutando /etc/ld.so.conf.d?
Disident Rage
1

En Red Hat Enterprise Linux (RHEL) 6, /etc/ld.so.confcontiene include ld.so.conf.d/*.conf. Sin esta línea, los elementos /etc/ld.so.conf.d/*.confnunca se analizarían.

Para ver qué bibliotecas / directorios ldconfigestá analizando

ldconfig -v 

Imprima el número de versión actual, el nombre de cada directorio a medida que se escanea y los enlaces que se crean.

pyther
fuente
Sí, revisé /etc/ld.so.confantes porque tenía curiosidad por lo que contenía. Tenía la includelínea.
Furia disidente el
Correr ldconfig -vpuede darte una idea de por qué no se incluye la biblioteca. Puede ejecutar ldconfig -ppara imprimir las bibliotecas y directorios que están en el archivo de caché actual.
pyther
0

Finalmente resolví esto con un alias:

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

Asegúrese de utilizar comillas simples, de modo que las variables se expandan en el momento de la invocación, no en el momento en que se define el alias.

Esta:

  • conserva HOME (que de lo contrario se establece en / root)
  • conserva la RUTA (que de lo contrario se establece en una ruta 'segura' en los líderes)
  • conserva el valor actual de LD_LIBRARY_PATH (que de lo contrario queda en blanco)

(Se puede ver lo que las cosas se ponen establece en la: sudo bash -c "echo $HOME")

Estoy trabajando con controladores personalizados y siempre tengo que sudo mis programas de prueba para acceder al controlador. No quiero instalar versiones de prueba de bibliotecas en el área del sistema, así que uso LD_LIBRARY_PATH para configurar un directorio de prueba específico según sea necesario. No puedo establecer un LD_LIBRARY_PATH fijo, necesito poder cambiarlo y mantener la configuración actual. Preservar PATH y HOME me da acceso a mi entorno de trabajo: scripts y estructura de directorios.

Este alias evita tener que otorgar permisos generales en sudoers ... y aparentemente no hay solución para LD_LIBRARY_PATH independientemente de la configuración de sudoers de todos modos. No funciona sudo dentro de los scripts, pero pueden codificarse según sea necesario.

maharvey67
fuente