Duplicate Symbol que je n'arrive pas à résoudre
Greensource
Membre
Bonjour,
j'ai récupéré un projet sur le net, dedans j'ai besoin d'importer le fichier teapot.h qui se trouve dans les sample code d'Apple. C'est pour récupérer la fameuse tellière OpenGL.
Bon sauf que dans son projet le gars dois importer dans deux classes différente ce fichier et du coup bam:
Moi je pensais que la directive "@import" évitait ce genre de mésaventure justement?
Quelqu'un comprend ce qui ce passe?
j'ai récupéré un projet sur le net, dedans j'ai besoin d'importer le fichier teapot.h qui se trouve dans les sample code d'Apple. C'est pour récupérer la fameuse tellière OpenGL.
Bon sauf que dans son projet le gars dois importer dans deux classes différente ce fichier et du coup bam:
ld: duplicate symbol _num_teapot_indices in /Users/iphonedev/Sandbox/NyARToolkitCrossCompile/build/NyARToolkitCrossCompile.build/Debug-iphonesimulator/NyARToolkitCrossCompile.build/Objects-normal/i386/GLGravityView.o and /Users/iphonedev/Sandbox/NyARToolkitCrossCompile/build/NyARToolkitCrossCompile.build/Debug-iphonesimulator/NyARToolkitCrossCompile.build/Objects-normal/i386/NyARToolkitCrossCompileAppDelegate.o
Moi je pensais que la directive "@import" évitait ce genre de mésaventure justement?
Quelqu'un comprend ce qui ce passe?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
"#import" permet simplement, en cas d'inclusions en cascade, d'éviter d'inclure plusieurs fois le même .h. Mais quand tu compiles différents fichiers, chaque compilation est indépendante. Donc si tu as *défini* (et pas seulement *déclaré*) une variable dans un .h, elle va se retrouver définie dans chaque fichier compilé incluant ton .h
La solution est de déclarer ta variable "extern" dans le .h, et de la définir dans un seul des fichiers de ton projet.
Donc a nous de les récupérer et de faire les mêmes modifs que lui, sauf qu'il est pas très explicite à ce sujet.
Enfin je crois avoir pigé le truc. Pour moi de ce que vous dites, le plus propre c'est d'ajouter un .c au fichier teapot.h.
Ouaip, c'est cohérent