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 :

Utilisation librairies (statique ou dynamique) contenant un ensemble de classes


Sujet :

C++

  1. #1
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut Utilisation librairies (statique ou dynamique) contenant un ensemble de classes
    Bonjour,

    Je cherche à comprendre comment créer et utiliser une libraire (statique dans un premir temps) à partir d'un ensemble de classes.

    Si on a projet regroupant plusieurs classes dont une qui est un peu plus haut niveau qui sert à lancer les calculs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Classe1.h/cpp
    Classe2.h/cpp
    ...
    ClasseN.h/cpp
    et
    Calcul.h/cpp
    Si maintenant je veux executer un calcul, je fais dans mon main.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "Calcul.h"
     
    int main()
    {
      Calcul c = Calcul();
      c.execute(args); // args = plein d'arguments
    return (0);
    }
    Admettons que je veille à présent faire une librairie de mon projet (Classe1...ClasseN et Calcul), je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1. je compile toutes mes classes pour obtenir les *.o
    2. je crée ma lib en faisant un truc du genre:
                      ar -rv project.lib Classe1.o ... ClasseN.o Calcul.o
    Mais ensuite comment je l'utilise?
    Je voudrais faire un truc du genre:
    Utilisation.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Question 1: dois-je ajouter #include "Calcul.h"
    // Question 2: dois-je déclarer la fonction void execute(args);
     
    void launchCalcul(args) // args = meme argument que pour Calcul::execute()
    {
       Calcul c = Calcul();
       c.execute(args); // args = plein d'arguments
    }
    Il faudra ensuite linker avec la lib:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ Classe1;o .. ClasseN.o Calcul.o -L. -lproject -o Utilisation
    C'est un peu flou pour moi, surout l'utilisation de la lib, quelle est la bonne manière de faire, si cela est possible.

    Merci de votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par LinuxUser Voir le message
    Hello, ça ne répond pas à la question, mais pourquoi faire ça au lieu d'un simple Calcul c; // ou Calcul c(args); si besoin.

    Ça sera probablement optimisé par le compilo, mais dans le cas ou ça ne l'est pas, ça fait des créations d'objets / copies inutiles.

  3. #3
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Disons:
    Pourquoi dois-je inclure Calcul.h dans le programme qui utilise la lib static:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "Calcul.h" // ici
     
    int main()
    {
      Calcul c = Calcul(args);
    return (0);
    }
    Et fournir les headers à l'édition des liens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ main.cpp -o main -L. -lCalcul -Iinclude/
    Je pensait que tout étant "inclue" dans la lib en soit, et qu'il n'y avait plus qu'à "piocher" dedans ce que l'on souhaite utiliser.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    -I est une option de compilation qui va dire à ton compilo où trouver les .h (du coup, dans ton .cpp tu n'as pas à écrire un truc du genre #include "C:\myproject\header\header.h".
    Grosso modo: à la compilation, on vérifie que les signatures des fonctions de la lib que tu utilises correspondent à celles qui sont décrites dans le .h.
    Lors de l'édition des liens, on lie (du verbe "lier") les appels de fonctions à l’implémentation (qui se trouve dans le .a, ou .so, ou .lib) desdites fonctions.

    la ligne de commande que tu as fournie, enchaine la compilation et l'édition de lien.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par LinuxUser Voir le message
    Pourquoi dois-je inclure Calcul.h dans le programme qui utilise la lib static:
    Que ta classe vienne de ton projet, d'une lib ou dll, pour l'utiliser il faut toujours inclure sa déclaration.

    J'ai l'impression que la véritable question est l'ajout d'une bibliothèque à un projet ..?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Que ta classe vienne de ton projet, d'une lib ou dll, pour l'utiliser il faut toujours inclure sa déclaration.
    OK.
    Citation Envoyé par Bousk Voir le message
    J'ai l'impression que la véritable question est l'ajout d'une bibliothèque à un projet ..?
    Si on voit les choses autrement, il s'agit plus d'un ajout mais d'une "livraison" d'une bibliothèque qui permet de faire des calculs.
    Comment l'utiliserais tu?

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/10/2007, 17h53
  2. Création et utilisation de librairies statiques avec Code::Blocks
    Par somberlord dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 22/07/2007, 09h58
  3. Utilisation de librairie statique C++ en c#
    Par Smogling dans le forum C#
    Réponses: 1
    Dernier message: 09/01/2007, 19h58
  4. Réponses: 2
    Dernier message: 19/08/2005, 17h02
  5. librairie statique/dynamique
    Par trop_wizz dans le forum MFC
    Réponses: 4
    Dernier message: 11/04/2005, 11h04

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