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 :

Undefined references sur des variables globales


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut Undefined references sur des variables globales
    Bonjour.
    J'ai un petit soucis de compilation. En fait, j'ai des variables globales et extern que je déclare dans un fichier "approx.h". J'aimerais les utiliser dans "approx.c" mais à la compilation, gcc me crache ceci :
    Compiling: approx.c
    /home/moons/Etudes/ProgConc/CalculPi/approx.c: In function ‘init’:
    /home/moons/Etudes/ProgConc/CalculPi/approx.c:8: warning: implicit declaration of function ‘malloc’
    /home/moons/Etudes/ProgConc/CalculPi/approx.c:8: warning: incompatible implicit declaration of built-in function ‘malloc’
    /home/moons/Etudes/ProgConc/CalculPi/approx.c:19: warning: passing argument 1 of ‘pthread_create’ makes pointer from integer without a cast
    /usr/include/pthread.h:227: note: expected ‘pthread_t * __restrict__’ but argument is of type ‘pthread_t’
    /home/moons/Etudes/ProgConc/CalculPi/approx.c:10: warning: unused variable ‘master_mutex’
    /home/moons/Etudes/ProgConc/CalculPi/approx.c:9: warning: unused variable ‘produit_mutex’
    Linking console executable: bin/Debug/CalculPi
    obj/Debug/approx.o: In function `init':
    /home/moons/Etudes/ProgConc/CalculPi/approx.c:12: undefined reference to `indice_prod'
    /home/moons/Etudes/ProgConc/CalculPi/approx.c:13: undefined reference to `indice_cons'
    /home/moons/Etudes/ProgConc/CalculPi/approx.c:14: undefined reference to `production'
    collect2: ld returned 1 exit status
    Et voici mon makefile:
    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
    # Makefile calculPi
     
    CC = gcc                      # compiler/linker frontend
    INCL = -I$(INCL_DIR)          # includes
    DEFS = -D_DEBUG_              # defines
    CFLAGS = -g $(INCL) $(DEFS)   # compiler flags
    LFLAGS = -lpthread -lm -g     # linker flags
     
    OBJ = approx.o producteur.o sequentialApproximation.o main.o
    BIN = calculPi.exe
    LINKOBJ  = approx.o producteur.o sequentialApproximation.o main.o
    RM = rm -fv
     
    all: $(BIN)
     
    clean:
    	${RM} *\~ \#*\# $(OBJ)
     
    clean_all: clean
    	${RM} $(BIN)
     
    cleanall: clean
    	${RM} $(BIN)
     
    $(BIN): $(OBJ)
    	$(CC) $(LFLAGS) -o $@ $^
     
    main.o: main.c
    approx.o: approx.c approx.h
    producteur.o: producteur.c producteur.h
    sequentialApproximation.o : sequentialApproximation.c sequentialApproximation.h
     
    .c.o:
    	$(CC) $(CFLAGS) -c $<
    Je ne vois pas pourquoi dans approx.c, les références des variables quand je les appelle ne sont pas reconnues.

    Merci de votre aid.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Par défaut
    Bonjour,

    Vous pensez bien à les déclarer dans un fichier .c ?
    Par exemple si dans un header vous avez <extern int foo;>, alors il faut que dans un .c il y ait un <int foo;>.

    Un petit <#include "stdio.h"> serait pas mal aussi

  3. #3
    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
    - Les erreurs concernant les variables ne sont pas des erreurs de compilation mais d'édition de liens.
    Idwakest a certainement raison : les variables déclarées extern dans certaines unités de compilation ne sont définies nulle part.

    - Il manque l'inclusion de <stdlib.h> pour les malloc

    -
    /home/moons/Etudes/ProgConc/CalculPi/approx.c:19: warning: passing argument 1 of ‘pthread_create’ makes pointer from integer without a cast
    /usr/include/pthread.h:227: note: expected ‘pthread_t * __restrict__’ but argument is of type ‘pthread_t’
    montre plus qu'un avertissement, une erreur dans le code !

Discussions similaires

  1. portée des variables globales dans un fichier js
    Par crakazoid dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 14/04/2006, 16h49
  2. utilisation des variables global dans tout le projet
    Par EYENGA Joël dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 10h55
  3. De la bonne pratique des variables globales...
    Par say dans le forum C++Builder
    Réponses: 9
    Dernier message: 25/11/2005, 09h47
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. Réponses: 4
    Dernier message: 15/12/2002, 04h19

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