Pb compilation: /usr/bin/ld: cannot find -l..
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
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.
-
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 !-
-
-
-
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 ^^ ! -
Contributeurce 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
-