567 votes

usr / bin / ld: impossible de trouver -l <nameOfTheLibrary>

quelqu'un peut-il m'aider s'il vous plaît je suis en train d'essayer de compiler mon programme et il renvoie cette erreur:

 usr/bin/ld: cannot find -l<nameOfTheLibrary>
 

Dans ma makefile, je fais la commande g ++ et lier ma bibliothèque qui est un lien symbolique vers ma bibliothèque située dans un autre répertoire.

Y a-t-il une option à ajouter pour que cela fonctionne s'il vous plaît?

Merci.

PS: Désolé pour mon anglais s'il y a des erreurs: s

573voto

dcarrith Points 615

Pour comprendre ce que l'éditeur de liens est à la recherche d', l'exécuter en mode verbose.

Par exemple, j'ai rencontré ce problème tout en essayant de compiler MySQL avec ZLIB soutien. J'ai reçu une erreur comme ceci lors de la compilation:

/usr/bin/ld: cannot find -lzlib

J'ai fait quelques Googl require et tenu à venir à travers les différentes questions du même genre où les gens puissent dire à assurez-vous que l' .si le fichier existe et si elle ne le fait pas, créer un lien symbolique vers la version du fichier, par exemple, zlib..1.2.8. Mais, quand j'ai vérifié, zlib.donc, N'existe pas. Alors, j'ai pensé, sûrement, qui ne pouvait pas être le problème.

Je suis tombé sur un autre post sur les Internets que suggéré d'exécuter le faire avec LD_DEBUG=tous:

LD_DEBUG=all make

Bien que j'ai une TONNE de sortie de débogage, il n'est pas vraiment utile. Elle a ajouté plus de confusion qu'autre chose. Donc, j'étais sur le point d'abandonner.

Ensuite, j'ai eu une révélation. J'ai pensé à vérifier le texte d'aide pour le ld de commande:

ld --help

De cela, j'ai compris comment faire pour exécuter ld en mode verbose (imaginez que):

ld -lzlib --verbose

C'est le résultat que j'ai obtenu:

==================================================
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...

Ainsi, pour enfin régler le problème, alors je pourrais compiler MySQL avec ma propre version de ZLIB (plutôt que la version intégrée):

sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so

Voila!

239voto

Saurabh Bhola Points 398

si votre nom de bibliothèque est "libxyz.so" et qu'il se trouve sur le chemin, dites: / home / user / myDir, puis reliez-le à votre programme

g ++ -L / home / utilisateur / myDir -lxyz myprog.cpp -o myprog

7voto

koan Points 2031

Lorsque vous compilez votre programme, vous devez fournir le chemin d'accès à la bibliothèque. en g ++, utilisez l'option -L:

 g++ myprogram.cc -o myprogram -lmylib -L/path/foo/bar
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X