Ik'm probeer mijn programma te compileren en het geeft deze foutmelding:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
in mijn makefile gebruik ik het commando g++
en link naar mijn library die een symbolische link is naar mijn library die in een andere directory staat.
Is er een optie die ik kan toevoegen om dit te laten werken?
Om uit te vinden waar de linker naar zoekt, moet je hem in verbose mode draaien.
Bijvoorbeeld, ik kwam dit probleem tegen toen ik MySQL probeerde te compileren met ZLIB ondersteuning. Ik kreeg een fout zoals deze tijdens het compileren:
/usr/bin/ld: cannot find -lzlib
Ik heb wat Googl'ing gedaan en kwam steeds verschillende problemen van dezelfde soort tegen waar mensen zeiden om ervoor te zorgen dat het
Ik kwam een andere post tegen op het Internet die voorstelde om make te draaien met LD_DEBUG=all:
LD_DEBUG=all make
Hoewel ik een TON aan debug output kreeg, was het niet echt nuttig. Het voegde meer verwarring toe dan iets anders. Dus, ik stond op het punt om het op te geven.
Toen had ik een openbaring. Ik dacht eraan om de helptekst voor het ld commando te controleren:
ld --help
Daaruit kwam ik te weten hoe ik ld in verbose mode kon uitvoeren (stel je voor):
ld -lzlib --verbose
Dit is de uitvoer die ik kreeg:
==================================================
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...
Dus, om het eindelijk te repareren, zodat ik MySQL kon compileren met mijn eigen versie van ZLIB (in plaats van de gebundelde versie):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voila!
Als je bibliotheeknaam zeg libxyz.so
is en het bevindt zich op een pad zeg:
/home/user/myDir
dan om het te linken aan je programma:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog