Pb compilation: /usr/bin/ld: cannot find -l..

Bonjour, J'essaie de compiler avec une bibliothèque que j'ai installée, et qui s'appelle "libTableauNoir".
seulement voilà: lorsque j'utilise gcc voilà ce que cela me sort:

Mon-PC:~/.../lib_tableau_noir_sdl$ gcc -lTableauNoir essai.c -o essai
/usr/bin/ld: cannot find -lTableauNoir
collect2: ld a retourné 1 code d'état d'exécution


J'aimerais comprendre ce qui se passe, et si possible avoir une solution :S

merci d'avance

3 réponses

Résumé de la discussion

Le souci principal est l'erreur du linker qui ne trouve pas la bibliothèque libTableauNoir lors de la compilation avec -lTableauNoir sous Linux et induit un code d'état 1. Plusieurs solutions proposées incluent la mise à jour du cache des bibliothèques via ldconfig, l'indication du chemin avec -L et le placement correct des fichiers .so. D'autres approches consistent à localiser la bibliothèque avec find ou locate et à vérifier les dépendances avec ldd pour adapter LD_LIBRARY_PATH. Enfin, la distinction entre bibliothèques dynamiques et statiques est rappelée, précisant que -static implique intégration dans l'exécutable et que la recherche peut nécessiter l'ajout du chemin d'installation.

Bobot (l’IA à votre service)
  1. Bonjour a tous,

    j'ai exactement le meme probleme, la meme erreur sauf qu'apres avoir suivis vos conseils ca ne fonctionne toujours pas.

    Ma ligne de compil :

    g++ -o test.exe main.o -L. -lfunc.so

    (ma lib s'appelle libfunc.so)

    J'ai teste le sudo ldconfig, ca n'a rien donne :(

    En tous cas, merci d'avance !
    425
    1. Contributeur
      libfunc.so est donc dans .
      essayer -lfunc
      1
    2. Super ca a l'air de fonctionner. Je n etais pas du tout au courant de se mecanisme !
      0
    3. Contributeur
      regarder la man page de ld, l'éditeur de lien
      0
    4. Bon c'est bon j ai reussi a me depatouiller, cependant je suis face a un truc que je trouve etrange (je dois certainement faire quelque chose de mal mais bon).

      Je m'expliquer :

      J'ai un ensemble de librairies nommees ainsi : libsfml-audio.so.1.6, libsfml-graphics.so.1.6 etc ..

      le seul moyen de compiler avec ces libs (le seul que j ai trouve du moins xD) a ete de les copiee dans le meme dossier en modifiant leurs noms pour me retrouver avec libsfml-audio.so, libsfml-graphics.so etc.

      La du coup j ai pu compiler ainsi :

      g++ main.o -I$chemin/include -L$chemin/lib -lsfml-audio -lsfml-graphics ...

      du coup je me suis dis que tout allait bien et que je n'avais plus besoin des libs nommees avec le .1.6 a la fin ... je les delete et la, impossible d'executer mon programme, ca me dit que la lib est manquante !!

      Du coup je ne comprend pas trop comment a fonctionne le linkage dans ce cas la ^^ !
      0
    5. Contributeur
      ce sont des libs dynamiques, elles sont chargées quand le programme est exécuté, et peuvent être utilisées par d'autres programmes, par opposition aux librairies statiques qui sont chargées dans le fichier exécutable, option -static de g++

      voir là https://fr.wikipedia.org/wiki/Biblioth%C3%A8que_logicielle , library étant traduit par bibliothèque
      0