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 :

[conception] d�pendances de biblioth�ques et headers


Sujet :

C++

  1. #1
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    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 299
    Billets dans le blog
    2
    Par d�faut [conception] d�pendances de biblioth�ques et headers
    Bonjour tout le monde,

    j'ai un probl�me tout b�te mais je ne parviens pas � trouver une solution �l�gante. C'est pourquoi je m'en remet � vous

    Soit un programme P qui utilise une biblioth�que statique L1.lib.
    La lib L1 d�finit une classe CL1 dans le fichier CL1.h.
    La class CL1 utilise une classe CL2 d�finie dans CL2.h et appartenant � la lib CL2.lib.
    Voici � quoi pourrait ressembler CL1.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "CL2.h"
     
    class CL1
    {
    // des fonctions, constructeurs, destructeurs, etc.
     
    private:
        CL2  monCL2; //une instance de CL2
    };
    Le probl�me qui se pose ici, c'est que dans mon programme P, lorsque je vais inclure CL1.h, il va m'inclure �galement CL2.h.
    Or, ce que je voudrais, c'est que lorsque j'ai compil� CL1, je n'ai plus besoin du tout de CL2 pour P. Id�alement, j'aimerais que P n'ait m�me pas � ce soucier de l'exitence de CL2.

    Ce qui m'intrigue, c'est qu'en essayant de r�soudre ce probl�me, on se retrouve confront� � des aberrations. Par exemple, si je modifie CL1.h ainsi:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class CL2;
     
    class CL1
    {
    // des fonctions, constructeurs, destructeurs, etc.
     
    private:
        CL2*  pMonCL2; //un pointeur sur une instance de CL2
    };
    �a ne me convient pas car si j'avais d�clar� CL2 en variable membre par valeur, c'est qu'il y a une raison.

    En fait donc, j'aimerais avoir quelques conseils sur la cr�ation de lib statique, afin que l'utilisation de cette lib soit la plus simple possible.


  2. #2
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Je ne pense pas que tu aies beaucoup d'alternatives, si tu veux supprimer une d�pendance sur une classe il faut que tu retires l'inclusion de son en-t�te, et donc que tu n'en gardes qu'un pointeur. Avec un pointeur intelligent tu es quitte de d�finir constructeurs et destructeurs pour ta classe.

    Par contre si L1.lib et L2.lib sont des biblioth�ques statiques, m�me si L1 ne fait plus r�f�rence � L2 dans ses en-t�tes, il faudra tout de m�me que P lie avec L2.lib.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Salut,

    Citation Envoy� par Laurent Gomila
    Par contre si L1.lib et L2.lib sont des biblioth�ques statiques, m�me si L1 ne fait plus r�f�rence � L2 dans ses en-t�tes, il faudra tout de m�me que P lie avec L2.lib.
    Pas n�cessairement : sous msvc on peut aller dans les options du 'Librarian' de L1 et ajouter L2.lib dans 'Additional Dependencies'.

    On peut aussi se d�brouiller avec gcc en faisant quelque chose comme :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ar xv libL2.a | cut -f3 -d ' ' | xargs ar rvs libL1.a
    Dans les deux cas l'effet est que P ne verra plus que L1.
    M�me si c'est pas forc�ment conseill�, il y a moyen en tous cas...

    MAT.

  4. #4
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Pas n�cessairement : sous msvc on peut aller dans les options du 'Librarian' de L1 et ajouter L2.lib dans 'Additional Dependencies'.
    Visual Studio propose en effet un certain nombre de raccourcis, mais je crois que tous finissent par lier, automatiquement ou non, avec la biblioth�que. Il n'y a pas moyen d'int�grer le code compil� de L2 dans L1.

    Pour ce qui est de la manip Linux, je n'ai aucune id�e de ce qu'elle fait.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Citation Envoy� par Laurent Gomila
    Il n'y a pas moyen d'int�grer le code compil� de L2 dans L1.
    Pourtant c'est ce que �a fait : tu peux distribuer L1.lib tout seul.

    Citation Envoy� par Laurent Gomila
    Pour ce qui est de la manip Linux, je n'ai aucune id�e de ce qu'elle fait.
    Ca extrait les .o de libL2.a et �a les rajoute dans libL1.a.

    Non mais bon c'�tait anecdotique...

    MAT.

  6. #6
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    En effet

    C'est bon � savoir, merci.

  7. #7
    Membre �clair�
    Avatar de gb_68
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Ao�t 2006
    Messages
    232
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 232
    Par d�faut
    Bonjour,

    par rapport au probl�me de supprimer l'inclusion de CL2.h pour les utilisateurs de la lib
    Citation Envoy� par r0d
    Le probl�me qui se pose ici, c'est que dans mon programme P, lorsque je vais inclure CL1.h, il va m'inclure �galement CL2.h.
    Or, ce que je voudrais, c'est que lorsque j'ai compil� CL1, je n'ai plus besoin du tout de CL2 pour P. Id�alement, j'aimerais que P n'ait m�me pas � ce soucier de l'exitence de CL2.
    Je ne crois pas qu'il y ait de solution "�l�gante". Pour utiliser CL1, par exemple faire un tableau de 10 CL1, le compilateur aura besoin de conna�tre la taille de CL1 et donc celle de CL2, que seul CL2.h peut lui fournir.

    Pour un pointeur vers une classe, il n'y a pas ce probl�me (quelque soit CL2, sont pointeur � une taille fixe).
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class CL2;
     
    class CL1
    {
    // des fonctions, constructeurs, destructeurs, etc.
     
    private:
        CL2*  pMonCL2; //un pointeur sur une instance de CL2
    };
    C'est pour cela que ce code pourrait passer, mais ce n'est pas ce que tu veux ...

Discussions similaires

  1. Conception d'une biblioth�que graphique
    Par salma_tn dans le forum UML
    R�ponses: 1
    Dernier message: 22/03/2010, 11h49
  2. conception d'un biblioth�ques �lectroniques
    Par saiad87alg dans le forum UML
    R�ponses: 2
    Dernier message: 19/03/2010, 20h50
  3. D�pendances de projets et probl�me de conception
    Par Captain_JS dans le forum C++
    R�ponses: 8
    Dernier message: 02/09/2008, 00h17
  4. conception : table des d�pendances
    Par gregolak dans le forum Langage SQL
    R�ponses: 12
    Dernier message: 09/10/2005, 16h10
  5. [Concept] D�pendances fonctionnelles
    Par bolo dans le forum D�cisions SGBD
    R�ponses: 4
    Dernier message: 24/01/2003, 20h13

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