Duplicate Symbol que je n'arrive pas à  résoudre

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:
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?

Réponses

  • ChachaChacha Membre
    juillet 2010 modifié #2
    dans 1278489049:

    Moi je pensais que la directive "@import"; évitait ce genre de mésaventure justement?
    Quelqu'un comprend ce qui ce passe?


    "#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.
  • GreensourceGreensource Membre
    18:05 modifié #3
    Ok, j'avais déjà  entendu parlé de ça, ça me parait logique. Mais alors a ton avis comme il faisait le gars qui a mis ce projet sur le net? Ca pouvais pas fonctionner non plus chez lui?
  • AliGatorAliGator Membre, Modérateur
    18:05 modifié #4
    Bah s'il ne l'inclus qu'une seule fois si ça devait marcher...
  • GreensourceGreensource Membre
    18:05 modifié #5
    Bon pour expliquer un peu plus ce qui ce passe, le mec à  créer un projet pour tester des techno de réalité augmentée. Sauf qu'il n'a pas voulu distribué le projet tel quel, à  cause des sample code récupérer sur le site d'Apple (problème de licences).

    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.
  • ChachaChacha Membre
    18:05 modifié #6
    dans 1278495171:

    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
Connectez-vous ou Inscrivez-vous pour répondre.