GNU/Linux >> Linux Esercitazione >  >> Linux

usr/bin/ld:impossibile trovare -l<nomedellalibreria>

Per capire cosa sta cercando il linker, eseguilo in modalità dettagliata.

Ad esempio, ho riscontrato questo problema durante il tentativo di compilare MySQL con il supporto ZLIB. Stavo ricevendo un errore come questo durante la compilazione:

/usr/bin/ld: cannot find -lzlib

Ho cercato su Google e ho continuato a imbattermi in diversi problemi dello stesso tipo in cui le persone dicevano di assicurarsi che il file .so esistesse effettivamente e, in caso contrario, creare un collegamento simbolico al file con versione, ad esempio zlib. quindi.1.2.8. Ma, quando ho controllato, zlib.so esisteva. Quindi, ho pensato, sicuramente non poteva essere quello il problema.

Mi sono imbattuto in un altro post su Internet che suggeriva di eseguire make con LD_DEBUG=all:

LD_DEBUG=all make

Anche se ho ricevuto un sacco di output di debug, in realtà non è stato utile. Ha aggiunto più confusione che altro. Quindi, stavo per arrendermi.

Poi, ho avuto un'illuminazione. Ho pensato di controllare effettivamente il testo della guida per il comando ld:

ld --help

Da ciò, ho capito come eseguire ld in modalità dettagliata (immagina che):

ld -lzlib --verbose

Questo è l'output che ho ottenuto:

==================================================
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

Suona, suona, suona...

Quindi, per risolverlo finalmente in modo da poter compilare MySQL con la mia versione di ZLIB (piuttosto che con la versione in bundle):

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

Voilà!


Se il nome della tua libreria è dì libxyz.so e si trova sul percorso diciamo:

/home/user/myDir

poi per collegarlo al tuo programma:

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

Non sembra esserci alcuna risposta che risolva il problema molto comune dei principianti di non riuscire a installare la libreria richiesta in primo luogo.

Sulle piattaforme Debianish, se libfoo è mancante, puoi installarlo frequentemente con qualcosa come

apt-get install libfoo-dev

Il -dev versione del pacchetto è richiesta per il lavoro di sviluppo, anche per il lavoro di sviluppo banale come la compilazione del codice sorgente da collegare alla libreria.

Il nome del pacchetto a volte richiede alcune decorazioni (libfoo0-dev ? foo-dev senza il lib prefisso? ecc.), oppure puoi semplicemente usare la ricerca dei pacchetti della tua distribuzione per scoprire con precisione quali pacchetti forniscono un particolare file.

(Se ce n'è più di uno, dovrai scoprire quali sono le loro differenze. Scegliere il più bello o il più popolare è una scorciatoia comune, ma non una procedura accettabile per qualsiasi serio lavoro di sviluppo.)

Per altre architetture (in particolare RPM) si applicano procedure simili, anche se i dettagli saranno diversi.


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

  2. /usr/bin/ls:/usr/bin/ls:Impossibile eseguire il file binario?

  3. Non riesci a trovare -lm?

  4. Installa i binari in /bin, /sbin, /usr/bin e /usr/sbin, interazioni con --prefix e DESTDIR

  5. Errore di compilazione OCaml:/usr/bin/ld:impossibile trovare -lstr

Eliminato accidentalmente /usr/bin/python3.5, non è possibile reinstallare?

ld non riesce a trovare una libreria esistente

/usr/bin/ld:impossibile trovare -lpython2.7

Impossibile trovare l'errore della libreria libcrypto

gcc - /usr/bin/ld errore:impossibile trovare <library> in /usr/local/lib anche se ldconfig lo elenca e il percorso è stato aggiunto a ld.so.conf

Qual è il significato di /usr/sbin, /usr/local/sbin e /usr/local/bin?