GNU/Linux >> Tutoriales Linux >  >> Linux

usr/bin/ld:no se puede encontrar -l<nombreDeLaBiblioteca>

Para averiguar qué está buscando el enlazador, ejecútelo en modo detallado.

Por ejemplo, encontré este problema al intentar compilar MySQL con soporte ZLIB. Recibí un error como este durante la compilación:

/usr/bin/ld: cannot find -lzlib

Busqué en Google y seguí encontrando diferentes problemas del mismo tipo en los que la gente decía que se asegurara de que el archivo .so realmente existe y, si no existe, cree un enlace simbólico al archivo versionado, por ejemplo, zlib. so.1.2.8. Pero, cuando revisé, zlib.so SÍ existía. Entonces, pensé, seguramente ese no podría ser el problema.

Encontré otra publicación en Internet que sugería ejecutar make con LD_DEBUG=all:

LD_DEBUG=all make

Aunque obtuve una TONELADA de resultados de depuración, en realidad no fue útil. Añadía más confusión que otra cosa. Entonces, estaba a punto de rendirme.

Entonces, tuve una epifanía. Pensé en revisar el texto de ayuda para el comando ld:

ld --help

A partir de eso, descubrí cómo ejecutar ld en modo detallado (imagínate eso):

ld -lzlib --verbose

Este es el resultado que obtuve:

==================================================
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.a failed
attempt to open /usr/local/lib64/libzlib.so failed
attempt to open /usr/local/lib64/libzlib.a failed
attempt to open /lib64/libzlib.so failed
attempt to open /lib64/libzlib.a failed
attempt to open /usr/lib64/libzlib.so failed
attempt to open /usr/lib64/libzlib.a failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.a failed
attempt to open /usr/local/lib/libzlib.so failed
attempt to open /usr/local/lib/libzlib.a failed
attempt to open /lib/libzlib.so failed
attempt to open /lib/libzlib.a failed
attempt to open /usr/lib/libzlib.so failed
attempt to open /usr/lib/libzlib.a failed
/usr/bin/ld.bfd.real: cannot find -lzlib

ding, ding, ding...

Entonces, para arreglarlo finalmente y poder compilar MySQL con mi propia versión de ZLIB (en lugar de la versión incluida):

sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so

¡Voilá!


Si el nombre de su biblioteca es libxyz.so y se encuentra en la ruta, diga:

/home/user/myDir

luego para vincularlo a su programa:

g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog

No parece haber ninguna respuesta que aborde el problema muy común de los principiantes de no poder instalar la biblioteca requerida en primer lugar.

En plataformas Debianish, si libfoo falta, puede instalarlo con frecuencia con algo como

apt-get install libfoo-dev

El -dev Se requiere la versión del paquete para el trabajo de desarrollo, incluso el trabajo de desarrollo trivial, como compilar el código fuente para vincular a la biblioteca.

El nombre del paquete a veces requerirá algunas decoraciones (libfoo0-dev ? foo-dev sin el lib ¿prefijo? etc.), o simplemente puede usar la búsqueda de paquetes de su distribución para averiguar con precisión qué paquetes proporcionan un archivo en particular.

(Si hay más de uno, deberá averiguar cuáles son sus diferencias. Elegir el más genial o el más popular es un atajo común, pero no es un procedimiento aceptable para ningún trabajo de desarrollo serio).

Para otras arquitecturas (sobre todo RPM) se aplican procedimientos similares, aunque los detalles serán diferentes.


Linux
  1. Error de configuración de phpize:no se pueden encontrar las fuentes (config.m4)

  2. /usr/bin Vs /usr/local/bin ¿En Linux?

  3. ¿No se puede encontrar -lm?

  4. /usr/bin/python3.5 eliminado accidentalmente, ¿no se puede reinstalar?

  5. ld no puede encontrar una biblioteca existente

No se puede encontrar el error de la biblioteca libcrypto

¿Cuál es la diferencia entre #!/usr/bin/env bash y #!/usr/bin/bash?

No se puede encontrar el error de pkg-config

¿Cuáles son los significados de /usr/sbin, /usr/local/sbin y /usr/local/bin?

Diferencia entre /bin y /usr/bin

¿Qué es /usr/bin/[?