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

C++ Discussion :

Variable globale et lib dynamique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut Variable globale et lib dynamique
    Bonjour,
    J'ai du code en plusieurs fichiers qui utilise des variables globales, déclarées en extern dans un .h inclut par tous. Cet ensemble est compilé en une lib. Cette lib est ensuite chargée par un autre programme, qui va potentiellement en charger plusieurs (différentes).

    Ma question, est-ce que si des variables globales ont le même nom dans plusieurs libs il y aura conflit ou ambiguïté à l'exécution ?

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Citation Envoyé par ymoreau Voir le message
    Bonjour,
    J'ai du code en plusieurs fichiers qui utilise des variables globales, déclarées en extern dans un .h inclut par tous. Cet ensemble est compilé en une lib. Cette lib est ensuite chargée par un autre programme, qui va potentiellement en charger plusieurs (différentes).

    Ma question, est-ce que si des variables globales ont le même nom dans plusieurs libs il y aura conflit ou ambiguïté à l'exécution ?
    Il y aura un conflit (une erreur lors de l'édition des liens il me semble) si tes bibliothèques définissent plusieurs fois une variable de même nom. Mais si elles se contentent de déclarer une même variable, le compilateur considérera qu'il s'agit d'une seule et unique variable.

    Mais il est très facile d'éviter cela en plaçant tes variables dans un namespace ou dans une de tes classes (en statique par exemple).

  3. #3
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Les variables globales ne sont pas déclarées plusieurs fois donc pas de problème à l'édition de lien (pour une lib). Ma question est au niveau de l'exécution, quand le programme va charger en mémoire plusieurs libs dynamiques qui auront potentiellement des variables globales de même nom.
    Et ce code ne dépend pas de moi, sinon j'aurais évité totalement les variables globales.

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ymoreau Voir le message
    Les variables globales ne sont pas déclarées plusieurs fois donc pas de problème à l'édition de lien (pour une lib). Ma question est au niveau de l'exécution, quand le programme va charger en mémoire plusieurs libs dynamiques qui auront potentiellement des variables globales de même nom.
    Et ce code ne dépend pas de moi, sinon j'aurais évité totalement les variables globales.
    Je ne suis pas sûr de bien comprendre.
    Bien que tu utilises les bibliothèques de façon dynamique, tu as besoin de leurs .h pour compiler le code qui les utilise. Les variables globales dont tu parles sont forcément définies dans les .h des bibliothèques (sinon elles ne sont pas utilisables à l'extérieur). C'est donc à la compilation que tu vas avoir un problème (lors du parsing des headers), même pas à l'édition de liens.

  5. #5
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Je ne suis pas certain de comment elles sont chargées par le programme, mais il n'est pas recompilé, c'est les libs qui sont compilées à la volée et utilisées. Il y a probablement un .h standard pour les libs qui ne tient pas compte de leur "code interne", et les variables globales dont je parle sont justement du "code interne", elles ne sont pas faites pour être utilisées en dehors de la lib, mais à l'intérieur, par les différents sources de la lib.

    Pour bien faire une lib chargée dynamiquement devrait englober son code dans un namespace ou autre, mais ce n'est pas le cas (et je n'ai pas vraiment la main dessus). Je voudrais donc savoir si ces variables propres à chaque lib peuvent créer des conflits (ou autre problème, comme une utilisation commune alors qu'il ne faudrait pas).

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ymoreau Voir le message
    Je ne suis pas certain de comment elles sont chargées par le programme, mais il n'est pas recompilé
    Ok, donc à priori, il se contente de charger les fonctions dont il a besoin, en utilisant leurs noms (peut-être en passant par un .def). Donc à priori, il n'a pas besoin des headers, ni d'aucun code de ces dlls, donc tu ne devrais pas avoir de problème de redéfinition de variable.
    Je dis bien à priori, car ce ne sont que des déductions.

Discussions similaires

  1. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20
  2. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  4. [VB6] creation de variable de type string dynamiquement
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 12/06/2003, 16h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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