Yritän kääntää ohjelmani ja se palauttaa tämän virheen:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
makefilessäni käytän komentoa g++
ja linkitän kirjastooni, joka on symbolinen linkki kirjastooni, joka sijaitsee toisessa hakemistossa.
Voinko lisätä jonkin vaihtoehdon, jotta se toimisi?
Jos haluat selvittää, mitä linkittäjä etsii, suorita se sanallisessa tilassa.
Törmäsin esimerkiksi tähän ongelmaan yrittäessäni kääntää MySQL:ää ZLIB-tuella. Sain tällaisen virheen kääntämisen aikana:
/usr/bin/ld: cannot find -lzlib
Googlettelin hieman ja törmäsin jatkuvasti erilaisiin samantyyppisiin ongelmiin, joissa sanottiin, että on varmistettava, että
Törmäsin Internetissä toiseen viestiin, jossa ehdotettiin make-ohjelman suorittamista LD_DEBUG=all -asetuksella:
LD_DEBUG=all make
Vaikka sain TON debuggaustulostetta, siitä ei ollut oikeastaan apua. Se lisäsi enemmän sekaannusta kuin mitään muuta. Olin siis aikeissa luovuttaa.
Sitten sain oivalluksen. Ajattelin tarkistaa ld-komennon ohjetekstin:
ld --help
Siitä sain selville, miten ld:tä voi ajaa sanallisessa tilassa (kuvittele):
ld -lzlib --verbose
Tämän tulosteen sain:
==================================================
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...
Joten, vihdoin korjata sen, jotta voisin kääntää MySQL:n omalla versiollani ZLIB:stä (eikä mukana tulevalla versiolla):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voila!
Jos kirjastosi nimi on vaikkapa libxyz.so
ja se sijaitsee polulla vaikkapa:
/home/user/myDir
linkittääksesi sen ohjelmaasi:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog