IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

Undefined symbols for architecture armv7 [Objective-C]


Sujet :

Objective-C

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 74
    Points
    74
    Par défaut Undefined symbols for architecture armv7
    Bonjour, voila mon soucis

    Je voudrais crée une variable globale à toutes les classes de mon applications, me documentant sur le sujet voila ce que je fait

    VCHome.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    extern NSDictionary *chaton;
     
    @interface .....
    VHome.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    - (void) newMessageReceived: (NSDictionnary *)messageContent{
        chaton = messageContent;
    }
    VCDetailChatAvecMembre.m Quelque part dans le viewDidLoad()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NSLog(@"CHATON : %@", chaton);
    Cette erreur me tombe dessus quand je compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Undefined symbols for architecture armv7:
      "_chaton", referenced from:
          -[VCHome newMessageReceived:] in VCHome.o
          -[VCDetailChatAvecMembre viewDidLoad] in VCDetailChatAvecMembre.o
    ld: symbol(s) not found for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    Merci pour vos réponse.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par ch0c4 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern NSDictionary *chaton;
    et le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NSDictionary *chaton;
    il est dans quel fichier .m ?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 74
    Points
    74
    Par défaut
    Nulle part car c'est une variable global et si je veux le mettre dans n'importe qu'elle endroit dans le code xcode m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Interface type cannot be statically allocated

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par ch0c4 Voir le message
    Nulle part car c'est une variable global et si je veux le mettre dans n'importe qu'elle endroit dans le code xcode m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Interface type cannot be statically allocated
    çà n'a rien à voir :
    en C et donc aussi en Objective-C et Objective-C++, vous déclarez dans le .h le nom et le type de la variable comme étant alloué ailleurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern TYPE var_name ;
    et dans le .c, le .m ou .mm
    le message "Interface type cannot be statically allocated" apparaît dans les conditions suivantes : vous avez déclaré une classe ou une interface en Objective-C et vous déclarez ensuite une variable en oubliant le "*" pour indiquer "pointeur sur", par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NSObject var_name ;
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NSObject *var_name ;
    Les classes, interfaces, protocoles en Objective-C sont toujours allouées dynamiquement contrairement au C++ qui admet les 2.
    Et Objective-C çà reste du C : donc "*" pour les pointeurs... la syntaxe "à la Java" ne passe pas pour les déclarations, par contre à l'invocation : "myObject.itsProperty" fonctionnera aussi bien que "myObject->itsProperty", pour peu que vous utilisiez correctement les accessors (@synthetize, @property et C°).

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 74
    Points
    74
    Par défaut
    Salut, merci pour la réponse,

    Mon problème n'est pas réglé car je veux que ma variable "chaton" qui est dans VCHome est la même valeur dans VCDetailChatAvecMembre.

    Avec ta solution sa me résous mon soucis de "linker" mais pas mon soucis de variable.

    Si je re-déclare ma variable "chaton" dans VCDetailChatAvecMembre elle n'a plus la valeur qu'elle avait dans le VCHome (normal tu vas me dire).

    Donc mon soucis c'est, comment je peux avoir cette variable (qui est dynamique) dans 2 classes différentes avec la même valeur ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    un seul NSDictionary *chaton; dans un seul .m évidemment

    d'ailleurs s'il n'y a plus de problème de link c'est que c'est le cas sinon vous auriez soit un undefined variable soit un duplicate variable...

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 74
    Points
    74
    Par défaut
    Désolé de te contredire, mais je n'ai plus d'erreur de "linker" quand je déclare ma variable dans les 2 .m sinon j'obtiens ceci quand je compile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Undefined symbols for architecture armv7:
      "_chaton", referenced from:
          -[VCDetailChatAvecMembre viewDidLoad] in VCDetailChatAvecMembre.o
    ld: symbol(s) not found for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    On voit bien que par rapport au message #1 il n'y a plus d'erreur sur le VCHome là où j'ai déclaré ma variable (NSDictionary *chaton).

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Vous êtes certain que tous les fichiers .m sont bien inclus dans toutes les cibles du projet ?

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 74
    Points
    74
    Par défaut
    C'est le fait que dans le "file inspector" du fichier il y a bien le projet coché dans l'onglet "target Membership" alors oui

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    testé dans un projet vierge : 1 seule variable dans un .m et accessible depuis l'autre qui inclus le .h contenant le "extern" : pas de problème, cela compile et link correctement.

    je ne sais pas ce que vous avez fait mais le .m qui contient la déclaration de la variable n'est pas compilé pour l'architecture armv7 : probablement un Build setting sur ce .m

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 74
    Points
    74
    Par défaut
    Ok merci pour tes réponses, pour ma variable disponible à toutes les classes, j'utilise l'appDelegate, c'est plus propre et sa fait plus objet ^^.
    Je met le post en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. IOS : undefined symbols for architecture i386
    Par Adryiy dans le forum Développement iOS
    Réponses: 1
    Dernier message: 23/08/2014, 20h26
  2. [CMake] Undefined symbols for architecture
    Par Joda89 dans le forum Systèmes de compilation
    Réponses: 0
    Dernier message: 11/05/2012, 13h07
  3. [CMake] Undefined symbols for architecture x86_64:
    Par Joda89 dans le forum Systèmes de compilation
    Réponses: 0
    Dernier message: 11/05/2012, 13h06
  4. [CMake] Undefined symbols for architecture x86_64:
    Par Joda89 dans le forum Systèmes de compilation
    Réponses: 0
    Dernier message: 11/05/2012, 13h04
  5. Undefined symbols for architecture x86_64 ?
    Par sebouff dans le forum C++
    Réponses: 1
    Dernier message: 04/04/2012, 21h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo