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 :

problème d'exécution de fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 132
    Par défaut problème d'exécution de fichier
    salut,
    bon voila tout court mon problème j'ai trois fichiers :
    irda.h
    irda.c
    test.c
    j'ai deux variables globales déclaré dans irda.h :
    int kode ;
    int button_pressed ;
    quand je compile ces fichiers le message suivant apparait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [root@emblin remote_control]# arm-linux-gcc *.o irrecord.c test.c -o test -lpthread
    /tmp/ccW73Iso.o:(.bss+0x0): multiple definition of `button_pressed'
    /tmp/cccMUSim.o:(.bss+0x0): first defined here
    /tmp/ccW73Iso.o:(.bss+0x4): multiple definition of `Newkode'
    /tmp/cccMUSim.o:(.bss+0x4): first defined here
    collect2: ld returned 1 exit status
    à noter que j'ai bien vérifié que ces deux variables sont déclarés une seulle fois
    merci

  2. #2
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    No comment sur les globales. Juste pour votre problème, avez-vous mis un guard ou un #pragma once à votre .h ?

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 132
    Par défaut
    l'entête de mon fichier est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #if !defined(__IRRECORD_H__)
    #define __IRRECORD_H__
    //-----------------------------------------------------------------------------
    #if defined(__cplusplus)
    extern "c" {
    #endif

  4. #4
    Membre extrêmement actif

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    On peut voir le fichier.c qui les utilise ces var glob

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 132
    Par défaut
    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
    #include "irrecord.h"
    #include "pthread.h"
    pthread_t get_button_pressed ;
     
    int main()
    {
     
    pthread_create(&get_button_pressed, NULL, get_remote_code, NULL);
    while(1)
    {
    	if ( Newkode == 1  )
    	{
    	Newkode = 0 ;
    	printf("la valeur de cccccces%d",button_pressed);
    	}
    }
    }

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Si tu definis tes variables globales dans un .h, tu vas avoir des définitions multiples (si ton .h est inclus dans plusieurs .c).

    défini tes variables globales dans un .c et, dans le .h correspondant, déclare les en extern

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Pierre Maurette Voir le message
    <...>#pragma once à votre .h ?
    Non standard. Aucun intérêt.

  8. #8
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    <...>#pragma once à votre .h ?
    Non standard. Aucun intérêt.
    Ça, c'est du lourd... Relisez votre norme (§6.10.6) et épargnez-vous, ainsi qu'à moi, vos lapalissades grincheuses.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Pierre Maurette Voir le message
    Ça, c'est du lourd... Relisez votre norme (§6.10.6) et épargnez-vous, ainsi qu'à moi, vos lapalissades grincheuses.
    Je ne vois pas le rapport avec une 'LaPalissade'...

    En tout cas, il n'y a aucun '#pragma once' dans n1124.

    Quand à §6.10.6, oui, #pragma existe depuis C90 (voire avant, je n'en sais rien), et alors ? Soit le paramètre (ici, 'once', non standard C99) est connu et interprété, mais la norme ignore comment (donc comportement indéfini), soit il est inconnu et il est proprement ignoré (ça, c'est un comportement standard spécifié).

    En définitive, c'est bien ce que je dis, c'est inutile, ou alors il faut préciser le contexte ce que tu as omis, d'où ma réaction.

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Salut,

    Il me semble que l'on définir des variables globales ( pas trop ) dans un un fichier entête .h à condition qu'elles soient statiques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef DATA_H
    #define DATA_H
     
    static int G_kode ;
    static  int G_button_pressed ;
     
    #endif
    A vérifier...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kris1 Voir le message
    bon voila tout court mon problème j'ai trois fichiers :
    irda.h
    irda.c
    test.c
    j'ai deux variables globales déclaré dans irda.h :
    int kode ;
    int button_pressed ;
    Mauvaise conception.
    1 - On ne définit pas d'objet ni de fonctions dans un header.
    2 - On utilise pas de globales sauf nécessité absolue[1].
    3 - Si on y est obligé (à démontrer...), on le fait correctement en mettant un préfixe indiquant que c'est une globale (G_), en plaçant la déclaration dans un header protégé contre les inclusions multiples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /* data.h */
    #ifndef DATA_H
    #define DATA_H
     
    extern int G_kode ;
    extern int G_button_pressed ;
     
    #endif
    et la définition dans un .c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /* data.c */
    #include "data.h"
     
    int G_kode ;
    int G_button_pressed ;
    http://emmanuel-delahaye.developpez....s.htm#globales

    -----------------
    [1] Je rappelle que les pthreads ont un champ (void*pdata) qui est fait pour passer des adresses de contextes...

    http://emmanuel-delahaye.developpez....ds.htm#donnees

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/05/2010, 11h10
  2. Réponses: 2
    Dernier message: 05/11/2009, 11h58
  3. Réponses: 3
    Dernier message: 23/12/2008, 12h24
  4. Réponses: 3
    Dernier message: 21/07/2008, 16h15

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