Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Problème avec programme en C
Envoyé par: Cilo

Voilà mon pb : tout se passe bien, gcc compile bien, il assemble bien mais au moment de l'édition de liens, là il me sort un truc du genre "undefined reference to une_fonction". Toutes les fonctions qu'il me sort sont dans mes fichiers entêtes et j'ai vérifié il lit bien mes fichiers entête. Il arrive sans pb la compilation (donc il trouve bien les fonctions qui sont situés dans mes fichiers entêtes) mais pourquoi ne les trouvent-ils pas au moment du link?
Ca me fait comme quand j'oublie d'inclure la bibliothèque de math (-lm) sauf que là, c'est pas vraiment une bibliothèque vu que tous les fichiers ont été créé par moi.

Poste le Wednesday 21 January 2004 19:43:29
Répondre     Citer    
Re: Problème avec programme en C
Envoyé par: abgech

Le problème n'en est pas vraiment un. Quelques explications:
- Les fichiers en-têtes sont utilisés par le préprocesseur, ils ne contiennent pas, en principe, de code exécutable, mais des déclarations, parfois des définitions (si tu envisage un jour de passer à C++, ces notions sont vraiment très importantes).
- Il faut donc que tu indiques à l'éditeur de liens quels sont les modules (fonctions si tu préfère) qu'il doit incorporer dans l'exécutable. Pour gcc, cela se fait par une combinaison d'options comme -L et/ou -l.
-L te permet de rajouter un répertoire à la liste des répertoires dans lesquels l'éditeur de liens va rechercher les éléments dont il a besoins.
-l permet à l'éditeur de liens d'aller parcourir la librairie spécifiée pour y trouver, un ou plusieurs modules dont il a besoin.
Ce sont de brêves explications, la réalité est un peu plus subtile, par exemple, l'ordre de recherche, utile à définir en cas de synonymie dans les noms de modules (si tu test une nouvelle version d'un module). Dans un premier temps, contente-toi de choses simples, lorsque tu les maitrisera, passe à un peu plus compliqué et, petit à petit, tu vas devenir un as.
Prenons à titre d'exemple que tu as un programme p.c, utilisant plusieurs modules,
1) un module m1.c, pas encore compilé, m1.c est dans le répertoire courant,
2) un module m2.c , déjà compilé, m2.o est dans le répertoire courant,
3) Un module m3, déjà compilé, contenu dans une librairie statique libmalib.a, elle-même située dans le répertoire ~/r1.
La commande de compilation sera:
gcc p.c m1.c m2.o -L~/r1 -lmalib
Tu peux rajouter d'autres options à cette ligne de commande.
Lorsque tu maitrisera les librairies statiques, tu pourras te faire les dents sur les librairies partagées.
Salut

Poste le Thursday 22 January 2004 08:00:47
Répondre     Citer    
Re: Problème avec programme en C
Envoyé par: Wedge

Salut smiling smiley

Il faut aussi faire attention à la syntaxe ! J'avais aussi ce genre d'erreurs après avoir créé une fonction Liaison_Sous_Arbres() et que j'avais tapé qque part Liaison_Sous_Arbre() ...

Le mieux pour compiler est aussi de creer un makefile, ça permet de gèrer beaucoup plus facilement les pbs de compilation et linkage.

Si tu veux, envoyes moi ton code à tychocel@yahoo.fr smiling smiley

Bon courage !


Poste le Thursday 22 January 2004 11:44:59
Répondre     Citer    
Re: Problème avec programme en C
Envoyé par: Cilo

C'est bon. Il fallait que je compile en .o certains fichiers et ensuite que je compile par un truc gcc mon_prog.c ma_lib.o et ça passe sans pb. Moi j'essayais de tout compiler d'un coup et c'est pour ça que ça ne passait pas. Merci à tous les 2 !

Poste le Thursday 22 January 2004 12:53:26
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Problème avec programme en C
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons