Définitions multiples de mes constantes de couleurs !
Salut à tous.
J'utilise une bibliothèque dans laquelle, j'ai déclaré d'une part des fonctions et d'autre part des constantes de couleurs.
Ma bibliothèque se nomme "libmine".
Ce qui me pose problème, ce sont mes constantes. Par contre, je n'ai pas de problèmes avec mes fonctions.
Dans "libmine.c", j'ai mis :
Code:
1 2 3 4 5
| #include "libmine.h"
T_COLOR _black = { 0, 0, 0};
T_COLOR _grey = {128, 128, 128};
T_COLOR _white = {255, 255, 255}; |
Dans "libmine.h", j'ai mis :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #ifndef __LIBMINE__
#define __LIBMINE__
typedef struct
{
char red;
char green;
char blue;
} T_COLOR;
T_COLOR _black;
T_COLOR _grey;
T_COLOR _white;
#endif |
Je compile la bibliothèque. Aucun problème.
Dans le programme "main.c", j'appelle l'include :
Code:
#include "libmain.h"
J'obtiens la liste suivante des messages d'erreurs :
Code:
1 2 3
| /usr/bin/ld*: /warehouse/Prog_C/09.Library//libmine.a(tft.o):(.data+0x808)*: définitions multiples de «*_white*»; main.o:(.bss+0x8)*: défini pour la première fois ici
/usr/bin/ld*: /warehouse/Prog_C/09.Library//libmine.a(tft.o):(.data+0x80c)*: définitions multiples de «*_grey*»; main.o:(.bss+0x4)*: défini pour la première fois ici
/usr/bin/ld*: /warehouse/Prog_C/09.Library//libmine.a(tft.o):(.bss+0xf0a0)*: définitions multiples de «*_black*»; main.o:(.bss+0x0)*: défini pour la première fois ici |
J'ai pourtant mis le warpper "#ifndef" afin d'éviter la duplication du contenu de "libmine.h".
A tout hasard, je donne le makefile du main.c :
Code:
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
| # ------------------------------- #
# Déclaration des Executables #
# ------------------------------- #
RM = @rm -f
CC = @gcc
EX = @chmod +x
# -------------------------- #
# Déclaration des Objets #
# -------------------------- #
SRC = main.c
OBJ = main.o
BIN = tft18
# ---------------------------- #
# Déclaration des Includes #
# ---------------------------- #
INCS = -I"/warehouse/Prog_C/09.Library/include/"
# --------------------------------- #
# Déclaration des Bibliothèques #
# --------------------------------- #
LIBS = -L"/warehouse/Prog_C/09.Library/"
# ------------------------------ #
# Déclaration des Paramètres #
# ------------------------------ #
FLAG = -O -Wall -Wextra -Wpedantic
LOAD = -lmine -lm
# ------------------------------------ #
# Compilation et Edition des liens #
# ------------------------------------ #
all: before $(BIN) after
before:
clear
$(RM) $(OBJ)
$(RM) $(BIN)
$(BIN): $(OBJ)
$(CC) $(OBJ) $(LIBS) -o $(BIN) $(LOAD)
$(OBJ): $(SRC)
$(CC) -c $(SRC) $(INCS) -o $(OBJ) $(FLAGS)
after:
$(RM) $(OBJ)
$(EX) $(BIN)
@./$(BIN) |
Pourquoi ai-je ce problème que sur les constantes ?
Je ne comprends pas pourquoi les déclaratives de mes fonctions ne me pose aucun problème.
Comment résoudre mon problème ?
Cordialement.
Artemus24.
@+