Bonjour à tous,
J'ai par le passé programmé en C avec Visual Studio.
Aujourd'hui j'utilise l'EDI Code::blocks 13.12 sous Ubuntu 14.04
Je souhaite regrouper mes variables globales dans un header intitulé 'globals.h'.
Un fichier 'globals.c' est prévu, entre autre pour une fonction d'initialisation de ces variables.
Le fichier contenant, global.h, main.cpp, globals.c appartiennent tous au projet.
Voici globals.h
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #ifndef GLOBALS_H_INCLUDED #define GLOBALS_H_INCLUDED #include "bird.h" struct Bird Oiseau; int Resolx,Resoly; void InitGlobals(); #endif // GLOBALS_H_INCLUDED
Voici le fichier globals.c
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include "globals.h" void InitGlobals() { Resolx=640; Resoly=480; };
Enfin voici le début du fichier principal
Code C : 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 #ifdef __cplusplus #include <cstdlib> #else #include <stdlib.h> #endif #include <SDL/SDL.h> #include "globals.h" int main ( int argc, char** argv ) { InitGlobals(); // initialize SDL video if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { printf( "Unable to init SDL: %s\n", SDL_GetError() ); return 1; }
Lors de la compilation un module objet globals.0 est créé correspondant à la compilation du fichier globals.c
Mais lorsqu'on active la commande 'build' ou 'rebuild' on a l'erreur suivante:
||=== Build: Debug in Flappy (compiler: GNU GCC Compiler) ===|
/home/gilles/Documents/projets-C/Flappy/main.cpp|14|référence indéfinie vers « InitGlobals() »|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Qui semble indiquer un problème de linkage main ne trouve pas la définition de InitGlobals(). Je ne sais comment sortir de là.
Si quelqu'un peut m'indiquer la nature du problème, il me semble que les fonctions C sont extern par défaut. Le prototype est bien dans le header inclus pour vérifier que l'appel est correct. C'est bien la définition de InitGlobals qui n'est pas trouvée. c'est le boulot du linker.
Je ne comprends pas...
Partager