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 :

Visual Studio 2008


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Points : 16
    Points
    16
    Par défaut Visual Studio 2008
    Bonjour,
    J'ai un code qui permet de générer une librairie (fait a la base sur VS 6.0) pour controler un lecteur de carte (gemalto).
    Si je génère le code j'obtiens donc un .lib qui devrait me permettre de communiquer avec le lecteur de carte.
    Cependant quand j'ajoute la librairie dans un nouveau projet VS 2008, j'ai de nombreuses erreur de LINK, pourtant j'ai tout essayer, ça fait 12h que je cherches, modifier editeur de lien, multi-thread, extern, rien ne marche.

    J'ai soit des erreurs avec libc.lib, ou LINK2001, ou il ne reconnait tout simplement pas des fonctions de la librairie.

    Si une personne peut me venir en aide, je n'ai plus d'idée... Je peux envoyer la librairie si besoin pour juste faire un test de compilation.

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 123
    Points
    12 123
    Par défaut
    Revenez sur les réglages par défaut du projet VS2008 et indiquez-nous précisément les messages d'erreurs obtenues.
    Vous pouvez toujours envoyer la lib avec le .h associé.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Points : 16
    Points
    16
    Par défaut
    envoyer ou?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Points : 16
    Points
    16
    Par défaut
    Si je crée un nouveau projet console win32

    Que dans Outils > Options > Projets et solutions > Répertoires de VC++ > Je rajoute dans Fichiers bibliothèques le chemin C: (ou il y a mon .lib)

    Que dans Pages de Propriétés > Editeurs de liens > Entrée > Dépendances Supplémentaires > Je rajoute ma librairie (CILK_32.lib)

    A ce stade j'ai le code suivant :

    // projet_pctwin.cpp*: définit le point d'entrée pour l'application console.
    //

    #include "stdafx.h"
    #pragma comment(lib, "CILK_32")

    extern int PP_CloseComm();



    int _tmain(int argc, _TCHAR* argv[])
    {

    PP_CloseComm();
    return 0;
    }


    Et les erreurs suivantes :

    1>Édition des liens en cours...

    1>projet_pctwin.obj : error LNK2019: symbole externe non résolu "int __cdecl PP_CloseComm(void)" (?PP_CloseComm@@YAHXZ) référencé dans la fonction _wmain

    1>C:\projet_pctwin\Debug\projet_pctwin.exe : fatal error LNK1120: 1 externes non résolus

    Merci d'avance, j'ai un peux tout essayer, ça c'est en mettant le minimum, j'ai les .h et .c qui permettent d'obtenir la librairie, j'ai tenter de la regenerer, de changer des options multi-thread etc, rien ne marche...

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 123
    Points
    12 123
    Par défaut
    Déjà la non utilisation d'un .h pour la lib, c'est louche.

    error LNK2019: symbole externe non résolu "int __cdecl PP_CloseComm(void)" (?PP_CloseComm@@YAHXZ)
    C'est simple, le compilateur ne voit dans aucune de librairies la fonction C++
    ?PP_CloseComm@@YAHXZ.

    Vérifiez avec un utilitaire, type dumpbin, le nom exporté de la fonction dans le fichier lib.

    Je pense que l'export sera en C et non en C++, donc avec un nom plus proche du "_PP_CloseComm@0" que du "?PP_CloseComm@@YAHXZ".

    Si c'est le cas un devrait faire l'affaire.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Points : 16
    Points
    16
    Par défaut
    j'avais essayé le extern 'C' et j'ai généré la librairie
    Pages Propriétés > C/C++ > Avancé > Compiler comme Code C++

    Si je met extern "C" int PP_CloseComm();

    J'ai ça :

    1>LINK : warning LNK4098: conflit entre la bibliothèque par défaut 'LIBC' et les autres bibliothèques*; utilisez /NODEFAULTLIB:library
    1>Incorporation du manifeste en cours...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Déjà la non utilisation d'un .h pour la lib, c'est louche.
    Si par exemple je n'avais que le .lib sans le code source, je pourrais pas inclure les .h a mon projet non?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 123
    Points
    12 123
    Par défaut
    Déjà, on a avancé, puisque l'on passe d'une erreur "LNK2019" à un warning "LNK4098".

    Le fait d'avoir les .h d'export des lib permet de ne pas avoir à faire les déclaration externe; et donc, de ne pas se tromper en les faisant comme vous l'avez fait en oubliant l'extern "C" {} (rassurez-vous, tout le monde est déjà tombé dans ce piège.
    Si le .h est bien fait, tous ces détails, comme aussi les constantes de compilation, les vérifications des C-Runtime utilisés, la version minimum du compilateur, etc seront vérifié automatiquement à l'inclusion du .h.

    Donc la livraison que d'un fichier lib, c'est une livraison POURRIE. Il faut un .h d'export (pas forcement celui qui sert à la compilation de la lib), qui doit vérifié le maximum des pré-requis d'utilisation de la librairie.

    Pour revenir au message d'erreur (de warning pour être exacte), il est fort probable que la C-Runtime utilisée pour compiler la librairie ne soit pas la même que celle qui est utilisée pour la compilation et l'édition de lien de l'exécutable.

    Un .h d'export correctement fait avertira dès la compilation le problème et indiquera quelle C-Runtime doit être utilisée.

    Si le .h reste introuvable mais que vous pouvez recompiler la lib, vérifiez que la compilation du programme utilise les mêmes options de compilations liées à la C-Runtime (/MT /MTD ....)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Points : 16
    Points
    16
    Par défaut
    merci pour l'aide, je vais essayé de m'en sortir

Discussions similaires

  1. Que pensez-vous de visual studio 2008 ?
    Par Louis-Guillaume Morand dans le forum Visual Studio
    Réponses: 36
    Dernier message: 17/11/2009, 03h41
  2. IronPython & visual studio 2008
    Par anthyme dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 13/06/2008, 14h50
  3. Visual Studio 2008 RTM
    Par The_badger_man dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 24/12/2007, 03h06
  4. Visual Studio 2008 BETA 2 [Intellisense]
    Par domdax dans le forum C#
    Réponses: 4
    Dernier message: 17/09/2007, 09h50

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