Jeg forsøger at kompilere mit program, og det returnerer denne fejl :
usr/bin/ld: cannot find -l<nameOfTheLibrary>
i min makefil bruger jeg kommandoen g++
og linker til mit bibliotek, som er et symbolsk link til mit bibliotek, der ligger i en anden mappe.
Er der en mulighed at tilføje for at få det til at virke venligst?
Du kan finde ud af, hvad linkeren leder efter, ved at køre den i verbose-tilstand.
Jeg stødte f.eks. på dette problem, da jeg forsøgte at kompilere MySQL med ZLIB-understøttelse. Jeg modtog en fejl som denne under kompilering:
/usr/bin/ld: cannot find -lzlib
Jeg googlede lidt og blev ved med at støde på forskellige problemer af samme slags, hvor folk sagde, at man skulle sikre sig, at filen
Jeg stødte på et andet indlæg på Internettet, der foreslog at køre make med LD_DEBUG=all:
LD_DEBUG=all make
Selv om jeg fik et TON af debugging output, var det faktisk ikke nyttigt. Det tilføjede mere forvirring end noget andet. Så jeg var ved at give op.
Så fik jeg en åbenbaring. Jeg tænkte på at tjekke hjælpeteksten til ld-kommandoen:
ld --help
Ud fra det fandt jeg ud af, hvordan man kører ld i verbose-tilstand (tænk engang):
ld -lzlib --verbose
Dette er det output, jeg fik:
==================================================
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, ding...
Så, for endelig at rette det, så jeg kunne kompilere MySQL med min egen version af ZLIB (i stedet for den medfølgende version):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voila!
Hvis dit bibliotek hedder f.eks. libxyz.so
, og det ligger på f.eks:
/home/user/myDir
så for at linke det til dit program:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog