GNU/Linux >> Linux Esercitazione >  >> Linux

ld non riesce a trovare una libreria esistente

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

Linux
  1. Come risolvere l'errore di configurazione:impossibile trovare la directory macro 'm4' [Risolto]

  2. Impossibile trovare un URL di base valido:errore YumRepo [risolto]

  3. Errore di configurazione di phpize:impossibile trovare le fonti (config.m4)

  4. Errore Impossibile trovare [estensione PHP mysqlnd] di OpenSSL

  5. Impossibile trovare pspell – Correggi l'errore di configurazione PHP

Non riesci a trovare -lm?

finestra mobile:impossibile trovare le credenziali aws nel contenitore sebbene esistano

Errore di compilazione utilizzando cmake:impossibile trovare -lpthreads

avviso di caricamento:impossibile trovare il simbolo della voce _start

perché "impossibile sovrascrivere il file esistente"?

Scopri se la libreria è nel percorso