Estoy tratando de construir un programa 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 env LD_LIBRARY_PATH?
Respuestas:
Ya lo configuró cuando hizo esto:
Pero eso no resolverá 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 vinculables dinámicamente. No se consulta en el momento del enlace (¡excepto tal vez para localizar bibliotecas requeridas por las propias herramientas integradas!).Para decirle al vinculador dónde encontrar bibliotecas en el momento de la compilación, debe usar la
-L
opción del vinculador. Tú ya hiciste eso también:Si todavía recibe el error, debe asegurarse de que la biblioteca esté realmente allí. ¿Tiene un archivo
libboost_regex-mt.so
olibboost_regex-mt.a
en ese (o cualquier) directorio? Tenga en cuenta que un archivo comolibboost_regex-mt.so.othersuffix
no cuenta para este propósito. Si no tiene eso, entonces probablemente necesite instalar el paquete de desarrollo de su distribución para esta biblioteca.fuente
$LD_LIBRARY_PATH
también es consultado porld
: «5. Para un enlazador nativo, busque el contenido de la variable de entorno" LD_LIBRARY_PATH ". »ld
manual solo se refiere a dependencias recursivas: bibliotecas dependientes de una biblioteca que ya se seleccionó para vincular. No se trata de encontrar bibliotecas para el ejecutable que se está construyendo. Eso es lo que-L
hace.apt-get
le da un comando no encontrado, entonces no es derivado de Debian, por lo que necesita otro método para instalar el paquete que falta. Sin embargo, ese es definitivamente tu problema.-Ldir -llib
debería funcionar como argumentos parald
ogcc/g++/etc
al incluir la fase de enlace, pero Q original y restaurado mencionamake
: con un archivo MAKE normal que probablemente necesiteLDFLAGS="whatever"
y con un archivo MAKE inteligente puede necesitar casi cualquier cosa, incluidos ladrillos para lanzar al autor del archivo MAKE inteligente.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 sus bibliotecas no pudieron ser reconocidas por otra aplicación. Luego agrego la ruta, es decir
/usr/local/hdf5/lib
, alx86_64-linux-gnu.conf
archivo. Solo pon en la siguiente línea. Salvar.Entonces corre
sudo ldconfig
Funcionó.
PS: sistema operativo Ubuntu 14.04
fuente
Puede configurarlo en su
~/.profile
archivo de inicio específico o de su shell (por ejemplo,~/.bashrc
para bash,~/.zshenv
para zsh). Luego, debe reiniciar su shell (y posiblemente cerrar sesión e iniciar sesión nuevamente, según su elección).Puede verificar su configuración con:
EDITAR:
LD_LIBRARY_PATH
es para bibliotecas compartidas que contienen código de máquina, cuyos nombres de archivo generalmente contienen.so
su nombre, posiblemente seguido de números separados por puntos para distinguir las diferentes versiones. Es posible queLD_LIBRARY_PATH
, a pesar de esto , no se encuentre una biblioteca debido a la 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), no relacionadosLD_LIBRARY_PATH
.fuente
LD_LIBRARY_PATH
(para evitar colisiones con las bibliotecas habituales). Debe hacer una pregunta específica para esto, con el mensaje de error que recibe.Si el error de la ruta de la biblioteca está en el vinculador, durante la compilación, debe agregar la ruta a la biblioteca en la variable $ LD_LIBRARY_PATH. Si el error de la biblioteca es cuando realmente ejecuta el programa compilado, entonces necesita agregar la ruta de la biblioteca a /etc/ld.so.conf y ejecutar ldconfig para reconstruir la caché de la ruta de búsqueda de la biblioteca.
fuente
Resuelto con:
agregar a
/etc/systemd/system/pm2-node.service
fuente