Programımı derlemeye çalışıyorum ve bu hatayı veriyor:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
makefile dosyamda g++
komutunu kullanıyorum ve başka bir dizinde bulunan kütüphaneme sembolik bir bağlantı olan kütüphaneme bağlantı veriyorum.
Çalışması için eklenecek bir seçenek var mı lütfen?
Bağlayıcının ne aradığını anlamak için verbose modunda çalıştırın.
Örneğin, MySQL'i ZLIB desteği ile derlemeye çalışırken bu sorunla karşılaştım. Derleme sırasında şöyle bir hata alıyordum:
/usr/bin/ld: cannot find -lzlib
Google'da biraz araştırma yaptım ve insanların
İnternette make'i LD_DEBUG=all ile çalıştırmayı öneren başka bir yazıya rastladım:
LD_DEBUG=all make
Bir ton hata ayıklama çıktısı almama rağmen, aslında yardımcı olmadı. Her şeyden çok kafa karışıklığı yarattı. Bu yüzden pes etmek üzereydim.
Sonra bir aydınlanma yaşadım. Aslında ld komutu için yardım metnini kontrol etmeyi düşündüm:
ld --help
Bu sayede, ld'yi verbose modunda nasıl çalıştıracağımı buldum (hayal edin):
ld -lzlib --verbose
Elde ettiğim çıktı bu:
==================================================
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.
Sonunda bunu düzeltmek için MySQL'i kendi ZLIB sürümümle (birlikte verilen sürüm yerine) derleyebildim:
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voila!
Kütüphanenizin adı libxyz.so
ise ve diyelim ki yol üzerinde bulunuyorsa:
/home/user/myDir
sonra programınıza bağlamak için:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog