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 :

Defines "variables" Pour Bibliotheques dynamiques


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Defines "variables" Pour Bibliotheques dynamiques
    Bonjour a tous,
    Pour l'un de mes projets, je dois faire un snake utilisant 3lib graphiques differentes, l'idee etant de maitriser les bibliotheques dynamiques sous Unix.
    Je me retrouve face a un probleme concernant un de mes define:

    La taille de chacune des "cases" de ma grille de jeu depends de ma librairie graphique:
    Avec la SFML, la taille en pixels est de 10 alors qu'avec Glut, la taille est de 2.

    J'ai donc mis dans chaque bibliotheque.so un fichier defines.hpp contenant
    pour la sfml: #define BOX_SIZE 10
    pour glut: #define BOX_SIZE 2

    Mais bien sur, a la compilation du projet, le compilo prends le 1er defines.hpp qu'il trouve et ne s'embete pas avec le second, et donc, que j'execute mon projet avec glut ou avec sfml, le define reste le meme...

    Est-il possible de resoudre ce probleme?
    Merci d'avance pour votre aide =)

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par lagarkane Voir le message
    Est-il possible de resoudre ce probleme?
    Sans doute... c'est toujours possible.
    Mais pas sans changer quelque chose de grave.

    Les defines dont tu parles sont des directives de pré-compilation. Elles sont donc interprétées avant la compilation. La compilation a lieu avant le linkage. Le linkage a lieu avant l'exécution.

    Lorsque tu utilise une bibliothèque dynamique, celle-ci est "choisie" au moment de l'exécution. D'après ce que j'en pense (on peut toujours se tromper), il est donc chronologiquement impossible qu'elle change quoi que ce soit aux directives de pré-compilations.

    Moralité : tu dois chercher une autre solution. Je te propose :
    1. faire en sorte que toutes tes bibliothèques soient iso-fonctionelles, et donc en particulier qu'elles aient les mêmes unités.
    2. ne pas utiliser des define, mais des variables (qui seront initialisées en fonction de la bibliothèque)

    je n'ai pas d'autre idée.

    Courage

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ok, merci pour cette reponse,

    J'ai ajoute un attribut a mes classes chargees par la bibliotheque dynamique, et je la refile aux classes qui en ont besoin...
    C'est un peu porc par rapport a un define, mais au moins ca marche =)
    Merci pour l'aide!

  4. #4
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par lagarkane Voir le message
    Ok, merci pour cette reponse,

    J'ai ajoute un attribut a mes classes chargees par la bibliotheque dynamique, et je la refile aux classes qui en ont besoin...
    C'est un peu porc par rapport a un define, mais au moins ca marche =)
    Merci pour l'aide!
    Bonjour,

    Je ne sais pas exactement ce que tu veux dire par "un attribut a mes classes chargees par la bibliotheque dynamique", mais sache qu'une define ce n'est vraiment pas top, et je n'ai pas l'impression que ce tu fais maintenant ne soit plus 'porc' qu'un define.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Comme R0d, je pense que ta constante soit liéee à la bibliothèque dynamiquement chargée est beaucoup moins 'porc' que d'utiliser un #define. Une constante #define n'est utilisée qu'à la compilation, n'est pas fortement typé, n'a pas de contrôle de portée, bref, est un peu 'porc'

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