Ich versuche, mein Programm zu kompilieren, und es gibt diesen Fehler zurück:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
In meinem Makefile verwende ich den Befehl g++
und verlinke auf meine Bibliothek, die ein symbolischer Link zu meiner Bibliothek ist, die sich in einem anderen Verzeichnis befindet.
Gibt es eine Option, die man hinzufügen kann, damit es funktioniert?
Um herauszufinden, wonach der Linker sucht, führen Sie ihn im ausführlichen Modus aus.
Ich bin zum Beispiel auf dieses Problem gestoßen, als ich versucht habe, MySQL mit ZLIB-Unterstützung zu kompilieren. Ich erhielt während der Kompilierung eine Fehlermeldung wie diese:
/usr/bin/ld: cannot find -lzlib
Ich habe ein wenig gegoogelt und bin immer wieder auf verschiedene Probleme der gleichen Art gestoßen, bei denen die Leute sagen, man solle sicherstellen, dass die Datei
Ich stieß auf einen anderen Beitrag im Internet, der vorschlug, make mit LD_DEBUG=all auszuführen:
LD_DEBUG=all make
Obwohl ich eine TONNE an Debugging-Ausgaben erhielt, war das nicht wirklich hilfreich. Es hat mehr Verwirrung gestiftet als alles andere. Also war ich kurz davor, aufzugeben.
Dann hatte ich eine Eingebung. Ich dachte daran, den Hilfetext für den Befehl ld zu lesen:
ld --help
So fand ich heraus, wie man ld im ausführlichen Modus ausführt (man stelle sich das vor):
ld -lzlib --verbose
Dies ist die Ausgabe, die ich erhielt:
==================================================
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...
Also, um es endlich zu beheben, so dass ich MySQL mit meiner eigenen Version von ZLIB kompilieren konnte (statt der mitgelieferten Version):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Voila!
Wenn der Name der Bibliothek libxyz.so
lautet und sie sich in einem Pfad von sagen wir:
/home/user/myDir
dann müssen Sie sie mit Ihrem Programm verknüpfen:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog