I'estou tentando compilar meu programa e ele retorna este erro :
usr/bin/ld: cannot find -l<nameOfTheLibrary>
no meu makefile eu utilizo o comando g++
e ligo à minha biblioteca, que é um link simbólico para a minha biblioteca localizada em outro diretório.
Há uma opção a acrescentar para que funcione, por favor?
Para descobrir o que o linker está procurando, execute-o em modo verboso.
Por exemplo, eu encontrei este problema enquanto tentava compilar o MySQL com o suporte da ZLIB. Eu estava a receber um erro como este durante a compilação:
/usr/bin/ld: cannot find -lzlib
Eu fiz algumas Googl'ing e continuei encontrando diferentes questões do mesmo tipo onde as pessoas diriam para ter certeza que o arquivo
Encontrei outro post na Internets que sugeria fazer com LD_DEBUG=all:
LD_DEBUG=all make
Embora eu tenha obtido um TON de saída de depuração, foi't realmente útil. Isso adicionou mais confusão do que qualquer outra coisa. Então, eu estava prestes a desistir.
Então, eu tive uma epifania. Pensei em verificar o texto de ajuda para o comando Id:
ld --help
A partir daí, eu descobri como executar ld em modo verboso (imagine isso):
ld -lzlib --verbose
Esta é a saída que eu tenho:
==================================================
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...
Então, para finalmente corrigi-lo para que eu pudesse compilar o MySQL com a minha própria versão do ZLIB (ao invés da versão empacotada):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voilá!
Se o nome da sua biblioteca diz libxyz.so
e está localizada no caminho, diga:
/home/user/myDir
e depois ligá-lo ao seu programa:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog