
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_PATH
se 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 -L
opció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.so
o libboost_regex-mt.a
en ese (o cualquier) directorio? Tenga en cuenta que un archivo como libboost_regex-mt.so.othersuffix
no 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 .conf
archivo 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.conf
archivo. Simplemente escriba la siguiente línea. Ahorrar.
Entonces corresudo ldconfig
Funcionó.
PD: SO Ubuntu 14.04
Respuesta3
Puede configurarlo en su ~/.profile
archivo de inicio y/o en un archivo de inicio específico de su shell (por ejemplo, ~/.bashrc
para bash, ~/.zshenv
para 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_PATH
es para bibliotecas compartidas que contienen código de máquina, cuyos nombres de archivo generalmente contienen .so
en 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 .so
archivos), 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