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

Visual C++ Discussion :

Créer une librairie statique


Sujet :

Visual C++

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 140
    Points : 116
    Points
    116
    Par défaut Créer une librairie statique
    Bonjour à tous,

    J'ai déjà posé la question suivante, il y a plusieurs années. Apparemment, cela m'a permis de créer quelques librairies dans la foulée. Mais aujourd'hui, j'ai oublié le mode d'emploi ! Comment créer une librairie statique ???

    Historique :

    Je démarre Visual C++
    • "Nouveau projet"
    • panneau de gauche "win32"
    • panneau de droite "Projet Win32"
    • je choisis l'emplacement "C:\0\1\p\visual 2010\libbtest\"
    • j'entre le nom "malib4" (euh, oui, c'est mon 4-ème essai !) puis "OK"
    • puis "suivant"
    • type d'application "bibliothèque statique"
    • options supplémentaires "en-tête précompilé"
    • puis "terminer"

    Je me retrouve avec un écran vide. Je m'attendais à avoir ne serait-ce qu'un petit message de bienvenue, mais rien.

    • fichier-nouveau-fichier
    • panneau de gauche "Visual C++"
    • panneau de droite "Ficher C++" puis "ouvrir"

    le fichier "source1.cpp" est sur mon écran, vide, bien sûr.
    Je tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double masomme(double a,double b)
    {
    	return (a+b);
    }
    puis générer - générer la solution
    En bas de l'écran, j'obtiens
    1>------ Début de la génération*: Projet*: malib4, Configuration*: Debug Win32 ------
    1> stdafx.cpp
    1> malib4.vcxproj -> C:\0\1\p\visual 2010\libbtest\malib4\Debug\malib4.lib
    ========== Génération*: 1 a réussi, 0 a échoué, 0 mis à jour, 0 a été ignoré ==========
    Tout est parfait donc. Je pense que j'ai une librairie malib4.lib qui contient une précieuse fonction masomme.
    Puis,
    • fichier - nouveau - fichier
    • panneau de gauche "Visual C++"
    • je clique sur Fichier d'en-tête (.h) dans le panneau de droite, puis "ouvrir"

    un nouvel onglet Header1.h apparaît : je tape double masomme(double a,double b);
    • puis "fichier" - "Quitter"

    On me dit :
    Voulez-vous enregistrer les modifications apportées aux éléments suivants :
    malib4.sln
    Fichiers divers
    Header1.h
    Je dis "oui"
    Pour tester ma toute nouvelle librairie, je crée un projet "testlib4" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "stdafx.h"
    #pragma comment(lib,"C:\\0\\1\\p\\visual 2010\\libbtest\\malib4\\Debug\\malib4.lib")
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	printf("c=%f\n",masomme(10.,20.));
    	return 0;
    }
    Mais au moment de la génération, on me répond :

    1>------ Début de la génération*: Projet*: testlib4, Configuration*: Debug Win32 ------
    1> testlib4.cpp
    1>testlib4.obj : error LNK2019: symbole externe non résolu "double __cdecl masomme(double,double)" (?masomme@@YANNN@Z) référencé dans la fonction _wmain
    1>C:\0\1\p\visual 2010\libbtest\testlib4\Debug\testlib4.exe : fatal error LNK1120: 1 externes non résolus
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
    Alors ma question est : qu'ai-je fait de mal ? Quel petit détail ai-je oublié pour que ça marche ?

    Merci d'avance à celui qui saura me montrer le chemin de la vérité...

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 579
    Points : 7 702
    Points
    7 702
    Par défaut
    Bonjour,

    D'après ta description détaillée tout semble correct pour une bibliothéque statique sous MSVC.

    Des pistes possibles pour une fonction qui serait non trouvée.
    - La bibliothèque est non trouvée. Je ne sais pas si le fait d'utiliser #pragma comment signale correctement ce cas.
    - Le format de la bibliothèque n'est pas compatible avec l'application. Là aussi, je pense que ça serait signalé.
    - La fonction n'est pas dans la bibliothèque. Je ne vois pas pourquoi ici.
    - La fonction n'a pas le bonne interface. Ici __cdecl est attendu, il me semble que les fonctions C++ sont plutôt par défaut en __stdcall. Essaie d'ajouter __cdecl devant la fonction de la bibliothèque.
    - Les modules ne sont pas dans le même langage. Mais ici les 2 sources sont bien en C++.
    - pour raison tordue, le nom de la fonction n'est le bon dans le fichier lib. Tu peux ouvrir le fichier lib. C'est un fichier binaire mais nom édulcoré de la fonction ?masomme@@YANNN@Z doit y apparaître en texte.

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 140
    Points : 116
    Points
    116
    Par défaut
    Merci dalfab pour ta réponse.

    Des pistes possibles pour une fonction qui serait non trouvée.
    - La bibliothèque est non trouvée. Je ne sais pas si le fait d'utiliser #pragma comment signale correctement ce cas.
    - Le format de la bibliothèque n'est pas compatible avec l'application. Là aussi, je pense que ça serait signalé.
    - La fonction n'est pas dans la bibliothèque. Je ne vois pas pourquoi ici.
    - La fonction n'a pas le bonne interface. Ici __cdecl est attendu, il me semble que les fonctions C++ sont plutôt par défaut en __stdcall. Essaie d'ajouter __cdecl devant la fonction de la bibliothèque.
    - Les modules ne sont pas dans le même langage. Mais ici les 2 sources sont bien en C++.
    - pour raison tordue, le nom de la fonction n'est le bon dans le fichier lib. Tu peux ouvrir le fichier lib. C'est un fichier binaire mais nom édulcoré de la fonction ?masomme@@YANNN@Z doit y apparaître en texte.
    Comme je l'ai dit dans mon premier message, j'ai plusieurs autres librairies et j'utilise tout le temps cette ligne #pragma et j'ai vérifié qu'elle était bien écrite
    Mais je crois que tu as mis le doigt sur le problème. J'ai cherché dans d'autres librairies et effectivement, on voit apparaître dans chacune d'elles le nom des fonctions définies dans les librairies en question.
    Or, je constate que "masomme" n'apparaît pas dans ma librairie malib4.lib.

    De plus, j'ai volontairement introduit une erreur qui rend le source incorrect dans source1.cpp (doube au lieu de double)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double masomme(double a,doube b)
    {
    	return  (a+b);
    }
    ...et lorsque je clique sur générer, VC me compile sans problème la librairie et ne signale aucune erreur.
    Il me semble donc clair que source1.txt n'appartient pas à la librairie malib4 !!!

    La question est donc "comment intégrer mon source source1.cpp dans la librairie ?"

    Merci de ton aide

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 579
    Points : 7 702
    Points
    7 702
    Par défaut
    Tu dois avoir une solution qui contient 2 projets, un pour ta bibliothèque, un pour ton application (ils peuvent être dans des solutions distinctes, mais ça force à 2 builds séparés). Avec un clic droit sur ton projet bibliothèque, tu peux faire "ajouter un fichier existant" et tu cliques sur le fichier cpp.

  5. #5
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 140
    Points : 116
    Points
    116
    Par défaut
    Ah ok, je vais essayer, merci

  6. #6
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 140
    Points : 116
    Points
    116
    Par défaut OK OK !
    Oui ! Ca marche maintenant.

    Un petit détail de rien du tout...mais il fallait le savoir !

    Merci mille fois !

    Joyeuses fêtes de fin d'année !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/11/2007, 08h32
  2. [2.0]Créer une librairie
    Par stone dans le forum C#
    Réponses: 49
    Dernier message: 28/10/2007, 08h26
  3. Réponses: 1
    Dernier message: 20/06/2007, 12h34
  4. Réponses: 4
    Dernier message: 24/03/2006, 16h49
  5. [C++]Créer des librairies statiques
    Par aiolia_aiolos dans le forum MFC
    Réponses: 3
    Dernier message: 04/01/2006, 12h05

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