Référence indéfinie + pointeur sur fonction
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
voila 3 jours que je fait face a une erreur de compilation de type
: référence indéfinie vers [....]
impossible de comprendre mon erreur .
j'utilise un tableau de pointeur sur fonction et j'ai le droit a cette erreur sur chacune des fonctions pointé ...
chaque fonction posant problème est définie dans un fichier propre a son groupement.
ces 4 fichiers inclue bien le .h (qui lui est commun a tout les fichiers)
mon Makefile contient chaque fichier comme il faut.
et je fournie les même et bon paramètre a chaque fonction ....
je peut pas vous donner tout mon code mais voici de quoi illustrer :
et voila les prototypes contenue dans le .h
des idées de pourquoi cette erreur est présente ?
merci de votre aide, une fois de plus.
voila 3 jours que je fait face a une erreur de compilation de type
: référence indéfinie vers [....]
impossible de comprendre mon erreur .
j'utilise un tableau de pointeur sur fonction et j'ai le droit a cette erreur sur chacune des fonctions pointé ...
chaque fonction posant problème est définie dans un fichier propre a son groupement.
ces 4 fichiers inclue bien le .h (qui lui est commun a tout les fichiers)
mon Makefile contient chaque fichier comme il faut.
et je fournie les même et bon paramètre a chaque fonction ....
je peut pas vous donner tout mon code mais voici de quoi illustrer :
void Psfonc(t_Serv *S, char *buff, int nbr) { int (*Psf[18])(t_Serv *, char *); Psf[0] = cmd_0; Psf[1] = cmd_1; Psf[2] = cmd_2; Psf[3] = cmd_3; Psf[4] = cmd_4; Psf[5] = cmd_5; Psf[6] = cmd_6; Psf[7] = cmd_7; Psf[8] = cmd_8; Psf[9] = cmd_9; Psf[10] = cmd_10; Psf[11] = cmd_11; Psf[12] = cmd_12; Psf[13] = cmd_13; Psf[14] = cmd_14; Psf[15] = cmd_15; Psf[16] = cmd_16; Psf[17] = cmd_17; if (nbr >= 0) (Psf[nbr])(S, buff); else if (nbr == -2) write(S->fd_fils, Log_KO, strlen(Log_KO)); else write(S->fd_fils, Unknown, strlen(Unknown)); }
et voila les prototypes contenue dans le .h
/*--- RequestFinder.c ---*/ int CmdTab(t_Serv *, char*); void Psfonc(t_Serv *, char *, int); /*--- Cmd/cmd_A_One.c ---*/ int cmd_0(t_Serv *, char*); int cmd_1(t_Serv *, char*); int cmd_2(t_Serv *, char*); int cmd_3(t_Serv *, char*); /*--- Cmd/cmd_A_Two.c ---*/ int cmd_4(t_Serv *, char*); int cmd_5(t_Serv *, char*); int cmd_6(t_Serv *, char*); int cmd_7(t_Serv *, char*); /*--- Cmd/cmd_B_One.c ---*/ int cmd_8(t_Serv *, char*); int cmd_9(t_Serv *, char*); int cmd_10(t_Serv *, char*); int cmd_11(t_Serv *, char*); int cmd_12(t_Serv *, char*); /*--- Cmd/cmd_B_Two.c ---*/ int cmd_13(t_Serv *, char*); int cmd_14(t_Serv *, char*); int cmd_16(t_Serv *, char*); int cmd_17(t_Serv *, char*);
des idées de pourquoi cette erreur est présente ?
merci de votre aide, une fois de plus.
A voir également:
- Référence indéfinie vers c
- Reference pto - Accueil - Box & Connexion Internet
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Clavier qwerty vers azerty - Guide
- Vers quelle adresse web renvoie ce lien - Guide
- Envoyer vers - Guide
1 réponse
Salut astrocurieux,
"Undefined reference" est une erreur signalée au stade de la liaison.
As tu bien mis dans ton makefile ou dans ta ligne gcc les fichiers .c où sont implémentées tes fonctions ?
Le code suivant compile bien :
Ainsi, d'après les commentaires dans ton .h,
Dal
"Undefined reference" est une erreur signalée au stade de la liaison.
As tu bien mis dans ton makefile ou dans ta ligne gcc les fichiers .c où sont implémentées tes fonctions ?
Le code suivant compile bien :
typedef struct { int something; } t_Serv; int cmd_0(t_Serv *, char*); int cmd_0(t_Serv * first_param, char* second_param) { /* do something extraordinary */ return 0; } int main(void) { int (*Psf[18])(t_Serv *, char *); Psf[0] = cmd_0; return 0; }
Ainsi, d'après les commentaires dans ton .h,
cmd_0()serait implémentée dans
Cmd/cmd_A_One.cqu'il te faut donc compiler, afin de disposer d'un .o accessible au linker que tu passes dans la phase de liaison.
Dal
j'utilise un Makefile qui d'ordinaire sur d'autre projet fonctionne a la perfection.
j'ai effectivement bien indiquer les différents chemins et nom des fichiers et ce dernier parvient a tout compilé quand il n'y a pas d'erreur.
j'ai peur d'avoir crée une inclusion circulaire entre mes fichiers pour être franc ...
je suis habitué au C et Cpp et la rien a faire je ne comprend pas de ou provient l'erreur.
après sa suppression tout marche de nouveau comme avant.
merci de m'avoir diriger dans la bonne direction.
sujet résolut
les Makefile peuvent être des galères absolues, bravo d'avoir trouvé l'origine de l'erreur :-)
dernièrement, je suis tombé sur çà : https://mesonbuild.com/ qu'il faut que je creuse un de ces jours
le projet est jeune, mais il a l'air prometteur, si cela ne te fait pas peur de sortir des outils purs GNU :-)
je manque de temps pour m’investir sur d'autre projet mais je le garde sous le coude.
c'st courageux de ce lancer sur du GNU ^^
bonne journée