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

Bibliothèques C++ Discussion :

librairie statique et problème d'initialisation


Sujet :

Bibliothèques C++

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut librairie statique et problème d'initialisation
    Bonjour,

    Je conçois un programme et j'ai souhaité le diviser en modules pour le gérer plus facilement. Pour cela j'ai créé des librairies statiques regroupant un ensemble de classes. Ces classes utilisent des variables statiques et j'ai un problème avec leur initialisation.

    Dans le cas "sans les librairies statiques", les variables sont initialisées au démarrage du programme (avant le "main()").

    Mais dans le cas "avec", les variables sont initialisées juste avant l'utilisation de la classe utilisant cette variable et non plus au début du programme.

    Comme ces variables sont initialisées par des fonctions (en fait, enregistrement de la classe dans une 'factory'), je me retrouve bloqué.

    Y a t'il un moyen de forcer l'initialisation des classes de la librairie? Ou bien une quelconque recommandation?

    Nota: je travaille sur Qt-Creator à la fois sur windows et sur linux. Pour ma foi, mon test sur les librairies statiques se fait sous 'windows'.

    merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut
    Pas tout à fait: je n'ai pas de problème d'ordre d'initialisation des variables (J'aurais pu en avoir un mais je l'ai réglé avant même de compiler).

    Mon programme fonctionne de cette manière

    -Enregistrement du premier objet dans la 'factory' (et initialisation de celle-ci au premier enregistrement: il y aurait pu y avoir un fiasco)
    -Enregistrement des autres objets
    -Puis le main et ce qui va avec...
    -Après je fais un appel à la factory, il me donne les clefs correspondants aux différents objets et enfin je les utilisent.

    Quand je regroupe les classes de mes objets dans une librairie, je n'ai plus mes objets d'enregistrés.

    Par contre, si je fais un appel à ces objets, je vois qu'il démarre la méthode d'enregistrement pour seulement les objets appelés.

    Le but de mon système de factory est de n'ajouter que les deux fichiers de l'objet (.cpp et .h) pour obtenir un nouveau membre dans la liste de ma factory. Et donc les cités dans un autre fichier ne me satisfait pas

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut
    Bon, je vais essayer de faire une bibliothèque dynamique pour voir...

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Je pense que le problème est un peu différent. Si tu as dans ta bibliothèque une variable statique, mais que le linker détecte que tu ne l'utilises pas dans le programme principal, il va supprimer cette variable au moment de la phase de link.

    Le problème, c'est que "utiliser" pour le linker, ça veut dire "le programme principal a une référence dessus", et non pas "lors de l'initialisation de cette variable, un side effect va modifier l'état du programme principal".

    Certains linkers ont des options pour forcer la génération du code correspondant à une variable, même si elles sont considérées comme inutiles. Par contre ça rend ton code spécifique à une plate-forme, et parfois, ces options doivent être spécifiées sur la ligne de commande et non dans le code source.

    Je n'ai pas vraiment de bonnes solutions à proposer. Et quand j'ai tenté de discuter de ce problème avec des fabricants de compilateurs, j'ai eu des réponses du style "bin, c'est normal !" et "on a toujours fait ainsi".
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut
    Merci pour ses informations. c'est peu être en effet au niveau du link: je n'ai pas fait assez de tests pour voir si ça vient de là.

    Sinon, j'ai commencé à modifier mes codes pour obtenir des librairies dynamique. Dans ce cas, si je ne fais pas d'appel à mes classes, je n'ai aucun objet enregistré. Par contre, si je fais appel à une seule classes, TOUT les objets s'enregistrent.

    Le seul petit problème que j'ai concerne les autres bibliothéques: je n'ai transformé que celle des objets pour la factory (et la factory se trouve dans une bibliothéque statique). Ce qui, je pense fais en sorte que j'ai deux factory de créés: celle du main et celle de la lib dynamique. Et mes objets s'enregistrent bien sur dans la lib dynamique.

    Je ne sais pas si les informations de la factory seront partagé entre le main et les objets si je rend la lib de ma factory dynamique . Testons cela...

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut
    Mes objets s'enregistrent mais il toujours sur la factory inaccessible. Je vais maintenant regrouper ma factory avec mes objets dans une même lib. Ce sera un arrangement provisoire.

  8. #8
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut
    Ça fonctionne... je considère ce topic comme résolu.

    Note: j'ai oublié de décommenter une ligne dans mon programme, donc peut être que le test précèdent (avoir deux lib dynamique) fonctionnait. Je n'ai pas la motivation nécessaire pour vérifier.

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

Discussions similaires

  1. Problème avec une librairie statique
    Par flo_k dans le forum C
    Réponses: 2
    Dernier message: 21/09/2009, 21h50
  2. Problème librairie statique
    Par apesle dans le forum C++
    Réponses: 4
    Dernier message: 30/03/2009, 23h12
  3. Réponses: 2
    Dernier message: 17/04/2008, 18h23
  4. Problème de Librairie statique
    Par TNT89 dans le forum C++
    Réponses: 8
    Dernier message: 24/12/2007, 18h18
  5. Réponses: 5
    Dernier message: 08/03/2006, 22h37

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