¿Dónde está LD_LIBRARY_PATH? ¿Cómo configuro la variable de entorno LD_LIBRARY_PATH?

¿Dónde está LD_LIBRARY_PATH? ¿Cómo configuro la variable de entorno LD_LIBRARY_PATH?

Estoy intentando crear un programa en C++ usando Unix.

Recibí el error

Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt

Escuché que solo necesito establecer la ubicación de libboost* en mi variable de entorno LD_LIBRARY_PATH y luego invocar make como lo hice originalmente, escribiendo

-L /usr/lib64 -l boost_regex-mt

o

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

¿Pero dónde está LD_LIBRARY_PATH? ¿Cómo configuro la variable de entorno LD_LIBRARY_PATH?

Respuesta1

¿Cómo configuro la variable de entorno LD_LIBRARY_PATH?

Ya lo configuraste cuando hiciste esto:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

Pero eso no solucionará tu problema. $LD_LIBRARY_PATHse consulta en el momento de la ejecución, para proporcionar una lista de directorios adicionales en los que buscar bibliotecas enlazables dinámicamente. No se consulta en el momento del enlace (¡excepto tal vez para localizar las bibliotecas requeridas por las propias herramientas integradas!).

Para indicarle al vinculador dónde encontrar bibliotecas en el momento de la compilación, debe usar la -Lopción del vinculador. Ya lo hiciste también:

-L /usr/lib64

Si sigue recibiendo el error, debe asegurarse de que la biblioteca esté realmente allí. ¿Tiene un archivo libboost_regex-mt.soo libboost_regex-mt.aen ese (o cualquier) directorio? Tenga en cuenta que un archivo como libboost_regex-mt.so.othersuffixno cuenta para este propósito. Si no lo tiene, probablemente necesite instalar el paquete de desarrollo de su distribución para esta biblioteca.

Respuesta2

Otra forma de agregar permanentemente una nueva ruta en LD_LIBRARY_PATH:

Editar .confarchivo en /etc/ld.so.conf.d/.

Alguna vez instalé una aplicación y otra aplicación no pudo reconocer sus bibliotecas. Luego agrego la ruta, es decir /usr/local/hdf5/lib, al x86_64-linux-gnu.confarchivo. Simplemente escriba la siguiente línea. Ahorrar.

Entonces corresudo ldconfig

Funcionó.

PD: SO Ubuntu 14.04

Respuesta3

Puede configurarlo en su ~/.profilearchivo de inicio y/o en un archivo de inicio específico de su shell (por ejemplo, ~/.bashrcpara bash, ~/.zshenvpara zsh). Luego debe reiniciar su shell (y posiblemente cerrar sesión y volver a iniciarla, según su elección).

Puedes comprobar tu configuración con:

env | grep '^LD_LIBRARY_PATH'

EDITAR: LD_LIBRARY_PATHes para bibliotecas compartidas que contienen código de máquina, cuyos nombres de archivo generalmente contienen .soen su nombre, posiblemente seguidos de números separados por puntos para distinguir diferentes versiones. Es posible que a pesar de LD_LIBRARY_PATH, no se encuentre una biblioteca debido a una falta de coincidencia de ABI. Tenga en cuenta también que los lenguajes (como Perl y Python) y los paquetes pueden tener su propio sistema de bibliotecas (posiblemente también con .soarchivos), sin relación con LD_LIBRARY_PATH.

Respuesta4

Resuelto con:

agregar a/etc/systemd/system/pm2-node.service

Environment=PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/app/nodejs/local/nvm/versions/node/v7.8.0/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/node/.pm2
Environment=LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
Environment=OCI_LIB_DIR=/opt/oracle/instantclient_12_2

información relacionada