In Ubuntu, puoi installare libtool
che risolve automaticamente le librerie.
$ sudo apt-get install libtool
Questo ha risolto un problema con ltdl
per me, che era stato installato come libltdl.so.7
e non è stato trovato semplicemente come -lltdl
nella marca.
Il problema è che il linker sta cercando libmagic.so
ma hai solo libmagic.so.1
Un trucco veloce è collegare simbolicamente libmagic.so.1
a libmagic.so
È convenzione Debian separare le librerie condivise nei loro componenti di runtime (libmagic1: /usr/lib/libmagic.so.1 → libmagic.so.1.0.0
) e i relativi componenti di sviluppo (libmagic-dev: /usr/lib/libmagic.so → …
).
Perché il soname della biblioteca è libmagic.so.1
, questa è la stringa che viene incorporata nell'eseguibile, quindi è il file che viene caricato quando l'eseguibile viene eseguito.
Tuttavia, poiché la libreria è specificata come -lmagic
al linker, cerca libmagic.so
, motivo per cui è necessario per lo sviluppo.
Vedi Diego E. Pettenò:Linker e nomi per i dettagli su come tutto questo funziona su Linux.
In breve, dovresti apt-get install libmagic-dev
. Questo non ti darà solo libmagic.so
ma anche altri file necessari per la compilazione come /usr/include/magic.h
.
Come appena formulato da grepsedawk, la risposta sta nel -l
opzione di g++
, chiamando ld
. Se guardi la pagina man di questo comando, puoi fare:
g++ -l:libmagic.so.1 [...]
- oppure:
g++ -lmagic [...]
, se hai un link simbolico chiamato libmagic.so nel tuo percorso libs