IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

erreur encore jamais vue (pour moi)


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 63
    Points : 39
    Points
    39
    Par défaut erreur encore jamais vue (pour moi)
    bonjour,
    je viens de finir un projet de réseau, le code est tapé mais le probleme c'est qu'a la compilation jai une erreur de ce type :
    client.o(.text+0x153): In function `client_appli':
    : undefined reference to `interface_client'
    collect2: ld returned 1 exit status

    est ce que qqun a deja vu cette erreur et pourrait eclairer ma lanterne?
    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut Re: erreur encore jamais vue (pour moi)
    Citation Envoyé par le_gueux90
    bonjour,
    je viens de finir un projet de réseau, le code est tapé mais le probleme c'est qu'a la compilation jai une erreur de ce type :
    client.o(.text+0x153): In function `client_appli':
    : undefined reference to `interface_client'
    collect2: ld returned 1 exit status

    est ce que qqun a deja vu cette erreur et pourrait eclairer ma lanterne?
    Merci
    Oui il s'agit d'une erreur d'edition des liens.

    En fait Tu dois faire appel à une fonction nommée interface_client depuis ta fonction client_appli de ton fichier client.c hors cette fonction n'est défini nul part. Du moins dans aucun des fichiers dont tu te sers pour creer ton executable
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 63
    Points : 39
    Points
    39
    Par défaut
    jai justement regarder et regarder encore pour voir si c'etai pas ca mais elle a bien l'air a sa place, c'est la qu'est le probleme.

    je met une partie des codes de client.c et interface_client.c au cas ou ca aiderai a comprendre.....



    CLIENT.C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #include <stdio.h>
    #include <curses.h> 		/* Primitives de gestion d'Žcran */
    #include <sys/signal.h>
    #include <sys/wait.h>
    #include "fon.h"   		/* primitives de la boite a outils */
    #include "client.h"
    #include "interface_client.h"
     
    #define SERVEUR_DEFAUT "localhost"
    #define SERVICE_DEFAUT "6500"
     
    int num_socket_client;
     
    struct sockaddr_in adr_client;
    struct sockaddr_in adr_distant;
    void client_appli (char *serveur,char*service,char *protocole);
    void serveur_appli (char *service, char* protocole);
     
    /*****************************************************************************/
    /*--------------- programme client -----------------------*/
     
    main(int argc, char *argv[])
    {
     
    	char *serveur= SERVEUR_DEFAUT; /* serveur par defaut */
    	char *service= SERVICE_DEFAUT; /* numero de service par defaut (no de port) */
    	char *protocole= PROTOCOLE_DEFAUT; /* protocole par defaut */
     
    	/* Permet de passer un nombre de parametre variable a l'executable */
    	switch(argc)
    	{
     	case 1 :		/* arguments par defaut */
    		  printf("serveur par defaut: %s\n",serveur);
    		  printf("service par defaut: %s\n",service);
    		  printf("protocole par defaut: %s\n",protocole);
    		  break;
      	case 2 :		/* serveur renseigne  */
    		  serveur=argv[1];
    		  printf("service par defaut: %s\n",service);
    		  printf("protocole par defaut: %s\n",protocole);
    		  break;
      	case 3 :		/* serveur, service renseignes */
    		  serveur=argv[1];
    		  service=argv[2];
    		  printf("protocole par defaut: %s\n",protocole);
    		  break;
      	case 4:			/* serveur, service, protocole renseignes */
    		  serveur=argv[1];
    		  service=argv[2];
    		  protocole=argv[3];
    		  break;
    	default:
    		  printf("Usage:client serveur(nom ou @IP)  service (nom ou port)  protocole (TCP ou UDP)\n");
    		  exit(1);
    	}
     
    	/* serveur est le nom (ou l'adresse IP) auquel le client va acceder */
    	/* service le numero de port sur le serveur correspondant au  */
    	/* service desire par le client */
    	/* protocole le protocole qui sera utilise pour la communication */
     
    	client_appli(serveur,service,protocole);
    }
     
    /*****************************************************************************/
    void client_appli (char *serveur,char*service,char *protocole)
     
    /* procedure correspondant au traitement du client de votre application */
     
    {
    interface_client();
     
    }
    INTERFACE_CLIENT.C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include "client.h"
    #include "interface_client.h"
     
     
    static char ligne[TAILLE_LIGNE];
     
    static void lire_chaine(char *ch, int long_max) {
    	if (fgets(ch, long_max, stdin) == NULL) {
    		fprintf(stderr, "*** erreur: EOF sur stdin\n");
    		exit(1);
    	}
    	ch[strlen(ch) - 1] = '\0';
    }
     
    static int lire_entier() {
    	int i;
    	lire_chaine(ligne, TAILLE_LIGNE);
    	while (sscanf(ligne, "%d", &i) != 1) {
    		fprintf(stderr, "*** erreur: valeur entiere attendue\n");
    		lire_chaine(ligne, TAILLE_LIGNE);
    	}
    	return i;
    }
     
    static char lire_caractere() {
    	lire_chaine(ligne, TAILLE_LIGNE);
    	while (ligne[0] == '\0') {
    		fprintf(stderr, "*** erreur: caractere attendu\n");
    		lire_chaine(ligne, TAILLE_LIGNE);
    	}
    	return ligne[0];
    }
     
    void interface_client() { .....}

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par le_gueux90
    jai justement regarder et regarder encore pour voir si c'etai pas ca mais elle a bien l'air a sa place, c'est la qu'est le probleme.

    je met une partie des codes de client.c et interface_client.c au cas ou ca aiderai a comprendre.....
    <...>
    Après un coup d'oeil rapide, ça a l'air correct (manque une garde dans le header...)
    Le problème vient sans doute de la réalisation (IDE, makefile...) Tu as bien fait un projet avec les 2 fichier sources ?
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 63
    Points : 39
    Points
    39
    Par défaut
    non le projet comporte plusieurs autres fichiers et jai preferer ne pas tout mettre.
    sinon je ne travaille pas avec un IDE mais sous Linux (ce qui n'est pas tres pratique).
    et le makefile utilisé est 1 makefile donné par les profs donc il ne devrait pas yavoir tro de problemes
    au niveau de l'executable je ne lai pas encore essayé puisque je bloque encore a la compilation

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par le_gueux90
    non le projet comporte plusieurs autres fichiers et jai preferer ne pas tout mettre.
    sinon je ne travaille pas avec un IDE mais sous Linux (ce qui n'est pas tres pratique).
    et le makefile utilisé est 1 makefile donné par les profs donc il ne devrait pas yavoir tro de problemes
    au niveau de l'executable je ne lai pas encore essayé puisque je bloque encore a la compilation
    C'est hors sujet, mais montre toujours le Makefile (Le bon forum pour ça est "Outils pour C & C++ / EDI / Compilateurs / etc")
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 63
    Points : 39
    Points
    39
    Par défaut
    voici le makefile utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    OBJ1 = fon.o client.o 
    OBJ2 = fon.o serveur.o 
    GCC =/usr/bin/gcc-2.95
    EXEC = ${OBJ1} client ${OBJ2} serveur
    all: ${EXEC} 	
    fon.o :  fon.h fon.c
    	${GCC} -DLINUX -DDEBUG -c fon.c
    	#${GCC} -DLINUX -c fon.c
    client.o : fon.h	client.c 
    	${GCC}  -c  client.c	
    serveur.o : fon.h	serveur.c 
    	${GCC}  -c  serveur.c	
    client : ${OBJ1}	
    	${GCC} ${OBJ1} -o client -lnsl -ltermcap 
    serveur : ${OBJ2}	
    	${GCC} ${OBJ2} -o serveur -lnsl -ltermcap 
    clean : 
    	rm -f ${EXEC} core
    la fonction fon contien toutes les methodes h_socket, h_reads,...
    client contient le code pour la partie client du réseau
    serveur contient le code pour la partie serveur du réseau

    jutilise aussi gestionLivres et interface_client qui respectivement gere la bibliotheque et fourni l'interface homme-machine

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Tu as dit que tu as un fichier interface_client.c qui contient ta fonction interface_client.

    Est-ce que ça ne t'étonne pas de ne pas voir interface_client.c dans ton makefile?

    Le problème est simple, lors de la compilation de ton application client, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ${GCC} ${OBJ1} -o client -lnsl -ltermcap
    mais dans OBJ1 il y a seulement:
    Si tu rajoutais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OBJ1 = fon.o client.o client_interface.o
    Et une ligne pour compiler client_interface.c, ça devrait marcher mieux...

    Jc

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 63
    Points : 39
    Points
    39
    Par défaut
    merci ca marche maintenant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Google Maps] Erreur XML jamais vue avant
    Par renaud26 dans le forum APIs Google
    Réponses: 4
    Dernier message: 25/10/2014, 17h43
  2. erreur sql inconnu (pour moi)
    Par kimcharlene dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/12/2006, 20h22
  3. Réponses: 4
    Dernier message: 07/04/2006, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo