Sto cercando di compilare il mio programma e mi restituisce questo errore:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
nel mio makefile uso il comando g++
e faccio il link alla mia libreria che è un link simbolico alla mia libreria situata in un'altra directory.
C'è un'opzione da aggiungere per farlo funzionare, per favore?
Per capire cosa sta cercando il linker, eseguitelo in modalità verbosa.
Per esempio, ho incontrato questo problema mentre cercavo di compilare MySQL con il supporto ZLIB. Ricevevo un errore come questo durante la compilazione:
/usr/bin/ld: cannot find -lzlib
Ho fatto un po' di Googl'ing e ho continuato ad imbattermi in diversi problemi dello stesso tipo in cui la gente diceva di assicurarsi che il file
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 ottenuto una TONNELLATA di output di debug, in realtà non è stato utile. Ha aggiunto più confusione che altro. Quindi, stavo per rinunciare.
Poi, ho avuto un'epifania. Ho pensato di controllare effettivamente il testo di aiuto per il comando ld:
ld --help
Da lì, ho capito come eseguire ld in modalità verbosa (immaginate un po'):
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
Ding, ding, ding...
Così, per risolvere il problema, ho potuto compilare MySQL con la mia versione di ZLIB (piuttosto che la versione in dotazione):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voilà!
Se il nome della vostra libreria è, ad esempio, libxyz.so
e si trova, ad esempio, nel percorso:
/home/user/myDir
allora per collegarla al vostro programma:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog