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