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 :
Dans "libmine.h", j'ai mis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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};
Je compile la bibliothèque. Aucun problème.
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 #ifndef __LIBMINE__ #define __LIBMINE__ typedef struct { char red; char green; char blue; } T_COLOR; T_COLOR _black; T_COLOR _grey; T_COLOR _white; #endif
Dans le programme "main.c", j'appelle l'include :
J'obtiens la liste suivante des messages d'erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part #include "libmain.h"
J'ai pourtant mis le warpper "#ifndef" afin d'éviter la duplication du contenu de "libmine.h".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
A tout hasard, je donne le makefile du main.c :
Pourquoi ai-je ce problème que sur les constantes ?
Code Makefile : 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
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)
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.
@+
Partager