Problème compilation, librairie en c, linux
Résolu/Fermé
Utilisateur anonyme
-
Modifié par mamiemando le 20/06/2012 à 21:40
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 21 juin 2012 à 09:58
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 21 juin 2012 à 09:58
A voir également:
- Problème compilation, librairie en c, linux
- Linux mint - Télécharger - Systèmes d'exploitation
- Diskinternals linux reader - Télécharger - Stockage
- Compilation pdf - Guide
- Linux live usb creator - Télécharger - Outils Internet
- Passer en root linux ✓ - Forum Linux / Unix
1 réponse
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
20 juin 2012 à 21:47
20 juin 2012 à 21:47
Ton erreur vient du fait que tu oublies de passer les options de linkage à la compilation du fichier qui contient la fonction main().
Dans le cas général une compilation d'un module (fichier .c sans main) va être du genre :
... tant dis que celle du fichier c va être du genre (ici je linke avec libtutu.a et libplop.so :
Note que pour une librairie dynamique (.so pour shared object) par convention le fichier ".so" doit avoir un nom qui commence par le préfixe lib. L'option -l attend le nom du fichier ".so" sans le préfixe "lib" ni l'extention ".so", ce qui donne -lplop. Par exemple écrire l'option "-lm" signifie "linke avec la librairie mathématique /usr/lib/libm.so".
Les fichier ".a" et ".so" sont cherchés par gcc dans les répertoires standards (/lib, /usr/lib, /usr/local/lib). Pour ajouter des chemins où espérer en trouver on utilise respectivement les options -L et -Wl,R.
Comme la compilation devient rapidement fastidieuse (beaucoup de commandes gcca vec plein d'options), je te conseille d'écrire un makefile pour la scripter.
Je t'invite aussi à lire ce fil de discussion plus détaillé qui rappelle toutes ces notions de compilation :
https://forums.commentcamarche.net/forum/affich-11131597-make-file-incluant-des-bibliotheques
Bonne chance
Dans le cas général une compilation d'un module (fichier .c sans main) va être du genre :
gcc -W -Wall -c toto.c
... tant dis que celle du fichier c va être du genre (ici je linke avec libtutu.a et libplop.so :
gcc -W -Wall main.c toto.o tata.o titi.o libtutu.a -lplop
Note que pour une librairie dynamique (.so pour shared object) par convention le fichier ".so" doit avoir un nom qui commence par le préfixe lib. L'option -l attend le nom du fichier ".so" sans le préfixe "lib" ni l'extention ".so", ce qui donne -lplop. Par exemple écrire l'option "-lm" signifie "linke avec la librairie mathématique /usr/lib/libm.so".
Les fichier ".a" et ".so" sont cherchés par gcc dans les répertoires standards (/lib, /usr/lib, /usr/local/lib). Pour ajouter des chemins où espérer en trouver on utilise respectivement les options -L et -Wl,R.
Comme la compilation devient rapidement fastidieuse (beaucoup de commandes gcca vec plein d'options), je te conseille d'écrire un makefile pour la scripter.
Je t'invite aussi à lire ce fil de discussion plus détaillé qui rappelle toutes ces notions de compilation :
https://forums.commentcamarche.net/forum/affich-11131597-make-file-incluant-des-bibliotheques
Bonne chance
20 juin 2012 à 22:33
20 juin 2012 à 23:32
21 juin 2012 à 01:39
Il me suffit de taper:
gcc vie.c -o vie -lTableauNoir -L/usr/local/lib/tableaunoir
j'ai pu réussir mon jeu de la vie grâce à toi ^^ merci!
21 juin 2012 à 09:58