Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2012
    Messages
    54
    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 : 54
    Points : 61
    Points
    61

    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 :
    1
    2
    3
    4
    extern NSDictionary *chaton;
    
    @interface .....
    VHome.m
    Code :
    1
    2
    3
    4
    - (void) newMessageReceived: (NSDictionnary *)messageContent{
        chaton = messageContent;
    }
    VCDetailChatAvecMembre.m Quelque part dans le viewDidLoad()

    Code :
    1
    2
    NSLog(@"CHATON : %@", chaton);
    Cette erreur me tombe dessus quand je compile
    Code :
    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 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 382
    Points : 2 914
    Points
    2 914

    Par défaut

    Citation Envoyé par ch0c4 Voir le message
    Code :
    1
    2
    extern NSDictionary *chaton;
    et le
    Code :
    1
    2
    NSDictionary *chaton;
    il est dans quel fichier .m ?

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2012
    Messages
    54
    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 : 54
    Points : 61
    Points
    61

    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 :
    1
    2
    Interface type cannot be statically allocated

  4. #4
    Expert Confirmé
    Homme Profil pro
    Inscrit en
    septembre 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 382
    Points : 2 914
    Points
    2 914

    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 :
    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 :
    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 :
    au lieu de
    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 du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2012
    Messages
    54
    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 : 54
    Points : 61
    Points
    61

    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 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 382
    Points : 2 914
    Points
    2 914

    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 du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2012
    Messages
    54
    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 : 54
    Points : 61
    Points
    61

    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 :
    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 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 382
    Points : 2 914
    Points
    2 914

    Par défaut

    Vous êtes certain que tous les fichiers .m sont bien inclus dans toutes les cibles du projet ?

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2012
    Messages
    54
    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 : 54
    Points : 61
    Points
    61

    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 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 382
    Points : 2 914
    Points
    2 914

    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 du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2012
    Messages
    54
    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 : 54
    Points : 61
    Points
    61

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •