En Ubuntu, puede instalar libtool
que resuelve las bibliotecas automáticamente.
$ sudo apt-get install libtool
Esto resolvió un problema con ltdl
para mí, que había sido instalado como libltdl.so.7
y no se encontró simplemente como -lltdl
en preparación.
El problema es que el enlazador está buscando libmagic.so
pero solo tienes libmagic.so.1
Un truco rápido es hacer un enlace simbólico libmagic.so.1
a libmagic.so
Es una convención de Debian separar las bibliotecas compartidas en sus componentes de tiempo de ejecución (libmagic1: /usr/lib/libmagic.so.1 → libmagic.so.1.0.0
) y sus componentes de desarrollo (libmagic-dev: /usr/lib/libmagic.so → …
).
Porque el soname de la biblioteca es libmagic.so.1
, esa es la cadena que se incrusta en el ejecutable, por lo que es el archivo que se carga cuando se ejecuta el ejecutable.
Sin embargo, debido a que la biblioteca se especifica como -lmagic
al enlazador, busca libmagic.so
, por lo que es necesario para el desarrollo.
Consulte Diego E. Pettenò:Enlazadores y nombres para obtener detalles sobre cómo funciona todo esto en Linux.
En resumen, deberías apt-get install libmagic-dev
. Esto no solo le dará libmagic.so
pero también otros archivos necesarios para compilar como /usr/include/magic.h
.
Tal como lo acaba de formular grepsedawk, la respuesta se encuentra en el -l
opción de g++
, llamando a ld
. Si observa la página del manual de este comando, puede hacer lo siguiente:
g++ -l:libmagic.so.1 [...]
- o:
g++ -lmagic [...]
, si tiene un enlace simbólico llamado libmagic.so en su ruta libs