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.


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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.