none
Comment créer une librairie statique RRS feed

  • Question

  • Bonjour à tous.

    Pour info, je suis déjà allé voir https://msdn.microsoft.com/fr-fr/library/ms235627%28VS.80%29.aspx qui est censé m'expliquer comment créer une bibliothèque statique. Mais je suis débutant en C++ et j'ignore ce qu'est une classe ; les commentaires me passent donc au dessus de la tête. Je n'ai aucune classe dans mes codes.

    Bizarrement, j'ai déjà créé plusieurs librairies, et à chaque fois c'est quasiment miraculeux que j'y parvienne, car la réaction de Visual Studio me paraît différente à chaque fois.

    Aujourd'hui, je crée une nouvelle librairie avec deux modules que j'ai mis au point par ailleurs et que je voudrais rendre désormais accessibles chaque fois que je le jugerai nécessaire.

    J'ai indiqué, à la création que je voulais une librairie statique (qui s'appellera "combinatoire.lib", j'ai décoché la case "Entêtes précompilés" conformément aux conseils du site mentionné ci-dessus, mais sans comprendre le sens de cette action de toutes manières.

    Et alors que je m'attends à voir apparaître un fichier vide nommé "combinatoire.cpp" l'écran reste vide. Je clique alors sur ajouter un fichier, du code, et voilà un fichier source1.cpp qui apparaît. Bon, cela ne me dérange pas que le nom ne soit pas "combinatoire.cpp" : simplement cela me surprend, car en général apparaissait dans ce cas un fichier portant le même nom que la librairie, mais bon ! Même chose pour un fichier d'en-tête dont je pensais qu'il s'appellerait "combinatoire.h" : je le crée moi-même et ce sera Header1.h. Au moment de sauver ces fichiers, je m'aperçois que l'on ne me propose pas de les sauver dans le dossier "combinatoire" que j'avais défini au départ et c'est donc moi qui vais les sauver à cet endroit.

    Et lorsque je clique sur "générer", Visual Studio me dit que ma librairie a été générée sans problème... mais je n'en vois aucune trace dans mon disque dur !!!

    Qu'ai-je donc mal fait ?

    Lors de la création d'autres librairies, je créais une librairie "exemple", dans un dossier x, étaient créés automatiquement un dossier exemple, dans x, un dossier exemple\exemple dans x avec un fichier exemple.cpp, un autre exemple.h, entre autres, et au moment de la génération était créée une librairie exemple.lib dans le dossier x\exemple\debug ou x\exemple\release selon les cas, tout cela automatiquement.

    Je voudrais donc comprendre et savoir une fois pour toutes ce que je dois savoir pour créer une librairie statique tout-à-fait ordinaire.

    Quelqu'un pour m'éclairer ?

    Merci d'avance.
    dimanche 17 janvier 2016 20:54

Réponses

  • Passe déjà en version 2015 Community :

    https://www.visualstudio.com/fr-fr/downloads/download-visual-studio-vs.aspx

    J'ai recompilé à l'arrache un projet de test :

    http://we.tl/QZza6djcnp

    comme ça tu devrais mieux voir l'arborescence.

    lundi 18 janvier 2016 10:45
  • Vous paniquez pour pas grand chose.

    Les choses peuvent sembler différentes car vous ne prêtez pas vraiment attention à certaines choses.

    Chaque version de VS est plus ou moins différente de la version précédente.

    Vous utiliser  VS2010 mais vous nous postez un lien sur la documentation de VS2005, faites attention à ce "détail".

    Ici, il a peu d'impact mais la réponse de Vincent Duvernet sur l'utilisation ou pas du répertoire "bin" est fonction de la version de VS. Et sa réponse est loin d'être complètement fausse, juste parce que les réglages par défaut de votre version sont légèrement différents des siens.

    La différence de "comportement" lors de la création d'un projet s'explique simplement pour moi. Dans l'un vous avez sélectionné l'option "Création d'un projet vide" et pas dans l'autre.

    Si vous n'êtes pas assez à l'aise avec VisualStudio et le C++, je vous conseille de ne pas utiliser l'option "Projet vide".


    Paul Bacelar, Ex - MVP VC++

    lundi 18 janvier 2016 10:52
    Modérateur

Toutes les réponses

  • Il doit te générer ton fichier .LIB dans un dossier 'Debug' qui est un sous dossier du dossier 'bin' dans ton projet de librairie.

    Ensuite, lorsque tu feras une relation entre ton application et ta lib, il fera une copie du fichier .LIB généré dans le dossier de ton application avant de compiler cela en fichier .EXE.

    Les en-têtes précompilés génèrent un fichier PCH. De mémoire, ça joue au niveau de la compilation. Il te génère un fichier StdAfx.cpp et .h qui est commun à ta librairie. Donc c'est pratique mais si tu le modifie, il faut relancer la compilation complète de la librairie. L'impact aujourd'hui est plus mince qu'avant mais j'ai souvenance de temps de Build de 4H. donc à l'époque c'était à utiliser avec modération.

    dimanche 17 janvier 2016 22:02
  • Merci de ta réponse.

    Mais je ne comprends pas ce que tu dis.

    .lib est généré dans debug ou release selon l'option en cours, debug et release étant des sous-dossiers du dossier de mon projet "exemple" (et pas "bin" : aucun dossier "bin" n'est jamais créé !). Par ailleurs, il va de soi que la librairie .lib est prise en tout ou partie pour la création de mon fichier .exe (puisque c'est exactement le but recherché) mais lorsque je crée un programme faisant référence à une librairie .lib, il n'y a pas de copie de ma librairie .lib dans mon projet. J'ai donc l'impression que nous ne parlons pas du même logiciel, donc je précise : j'utilise le logiciel

    Microsoft Visual Studio 2010
    Version 10.0.40219.1 SP1Rel
    Microsoft .NET Framework
    Version 4.6.00081 SP1Rel

    Version installée : VC Express

    Microsoft Visual C++ 2010   01013-169-2610014-70286
    Microsoft Visual C++ 2010

    Il est possible que ce ne soit pas la version la plus récente !

    Par ailleurs je n'ai pas la réponse à mes questions. Je ne cherche absolument pas à savoir à quoi sert de pré-compiler les en-têtes : je voudrais savoir ce que je dois faire pour que ça marche, tout simplement.

    J'ai écrit que visual C++ semble ne pas agir toujours de la même façon. Depuis mon premier message, j'ai fait de multiples autres essais et finalement, ça marche. Mais je suis sûr que la prochaine fois que je voudrais créer une librairie, ce sera la même galère. Exemple :

    Après avoir créé le nom d'une nouvelle librairie, si je clique sur "projet", puis "ajouter un nouvel élément", j'ai le loisir de définir le nom de ce nouvel élément, et l'élément est créé automatiquement dans mon répertoire. Or dans un essai précédent, appuyer sur "projet" ne m'offrait pas cette possibilité d'"ajouter un nouvel élément" et je pouvais bien créer de nouveaux éléments en passant par "fichier" mais le nom était forcément "Source1.cpp" sans que je puisse choisir le nom et je devais sauver ce fichier en choisissant à la main le dossier où je voulais le ranger. Ultérieurement, "générer" me laissait un message rassurant me disant que ma librairie avait été créée alors que mon fichier .lib que je voulais n'existait nulle part sur mon disque dur.

    Tout cela est très perturbant : un coup c'est comme-ci, un coup c'est come ça, et il est vrai qu'après ne nombreux essais je finis toujours par créer ma librairie, mais je ne connais pas la procédure qui me permettra de faire directement et du premier coup l'opération.

    Je ne suis pas en train de dire que Visual C++ ne marche pas ! Je dis simplement que je n'ai pas compris comment ça marche, et que c'est pour cette raison que j'ai besoin de quelques éclaircissements.


    Je te remercie d'avoir pris le temps de me répondre.

    lundi 18 janvier 2016 10:13
  • Passe déjà en version 2015 Community :

    https://www.visualstudio.com/fr-fr/downloads/download-visual-studio-vs.aspx

    J'ai recompilé à l'arrache un projet de test :

    http://we.tl/QZza6djcnp

    comme ça tu devrais mieux voir l'arborescence.

    lundi 18 janvier 2016 10:45
  • Vous paniquez pour pas grand chose.

    Les choses peuvent sembler différentes car vous ne prêtez pas vraiment attention à certaines choses.

    Chaque version de VS est plus ou moins différente de la version précédente.

    Vous utiliser  VS2010 mais vous nous postez un lien sur la documentation de VS2005, faites attention à ce "détail".

    Ici, il a peu d'impact mais la réponse de Vincent Duvernet sur l'utilisation ou pas du répertoire "bin" est fonction de la version de VS. Et sa réponse est loin d'être complètement fausse, juste parce que les réglages par défaut de votre version sont légèrement différents des siens.

    La différence de "comportement" lors de la création d'un projet s'explique simplement pour moi. Dans l'un vous avez sélectionné l'option "Création d'un projet vide" et pas dans l'autre.

    Si vous n'êtes pas assez à l'aise avec VisualStudio et le C++, je vous conseille de ne pas utiliser l'option "Projet vide".


    Paul Bacelar, Ex - MVP VC++

    lundi 18 janvier 2016 10:52
    Modérateur