Voila j'ai une structure global dans un .h

Ma structure :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct          s_param
{
  char                  *name;
  unsigned int          nbArg;
  unsigned long int     syscall;
  unsigned int          typeRetour;
  int                   firstArg;
  int                   secondArg;
  int                   thirdArg;
  int                   fourthArg;
  int                   fifthArg;
  int                   sixthArg;
}                       t_param;
et que je declare ma global juste en dessous dans mon .h.
Je vous ai mis juste deux ligne car les 300 lignes de syscall serait un peu horrible

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
# define        INT     10
# define        UINT    11
# define        STR     12
# define        PTR     13
 
const t_param         g_param[300] =
  {
    {"read", 3, 0, INT, INT, PTR, UINT, 0, 0, 0},
    {"write\t", 3, 1, INT, INT, STR, UINT, 0 ,0 ,0}
  };
Donc cette global est uniquement en lecture. En incluant le .h que dans un seul .c sa marche et c'est fonctionnel.
Malheureusement pour eviter de rendre un peu le fichier trop sal, j'ai eu envie de partager mes fonctions dans plusieurs .c
Mais cette erreur apparait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
get_reg.o:(.rodata+0x20): multiple definition of `g_param'
main.o:(.rodata+0x20): first defined here
collect2: ld returned 1 exit status
make: *** [test] Error 1
Cette global est pour le moment utilise uniquement dans deux .c (c'est pour sa que l'erreur n'est que dans deux .c).
Donc voila si vous avez une idee ou deux ce serait cool car la je bloque.

Ps : j'ai essaye de la declare en extern la global mais ne marche pas et me fait la meme erreur avec des warnings en plus.

Cordialement