Signaler

Référence indéfinie + pointeur sur fonction [Résolu]

Posez votre question astrocurieux 165Messages postés mardi 24 février 2015Date d'inscription 11 octobre 2017 Dernière intervention - Dernière réponse le 16 mai 2017 à 10:49 par astrocurieux
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 :

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.


Utile
+0
plus moins
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 :

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.c
qu'il te faut donc compiler, afin de disposer d'un .o accessible au linker que tu passes dans la phase de liaison.

Dal
astrocurieux 165Messages postés mardi 24 février 2015Date d'inscription 11 octobre 2017 Dernière intervention - 15 mai 2017 à 20:33
bonsoir Dal, merci de te penché sur mon problème.

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.
Répondre
astrocurieux 165Messages postés mardi 24 février 2015Date d'inscription 11 octobre 2017 Dernière intervention - 15 mai 2017 à 20:48
après t'avoir lue je suis tout de même retourné sur mon Makefile. Ce dernier compile en une seul fois deux binaire différent et évidement caché dans les dizaine de fichier j'en est retrouver un en doublons dans les deux sources.

après sa suppression tout marche de nouveau comme avant.
merci de m'avoir diriger dans la bonne direction.

sujet résolut
Répondre
[Dal] 4424Messages postés mercredi 15 septembre 2004Date d'inscription ContributeurStatut 16 octobre 2017 Dernière intervention - 16 mai 2017 à 10:17
super :-)

les Makefile peuvent être des galères absolues, bravo d'avoir trouvé l'origine de l'erreur :-)

dernièrement, je suis tombé sur çà : http://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 :-)
Répondre
astrocurieux 165Messages postés mardi 24 février 2015Date d'inscription 11 octobre 2017 Dernière intervention - 16 mai 2017 à 10:49
très intéressant comme projet,
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
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !