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

MFC Discussion :

[dll] Compiler une dll à partir de sources Linux


Sujet :

MFC

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 865
    Points : 4 860
    Points
    4 860
    Par défaut [dll] Compiler une dll à partir de sources Linux
    Bonjour

    Mon problème fait suite à un précédent thread du forum C++. En effet, je porte actuellement un code de librairie C++ venant de Linux vers Windows en utilisant Visual C++ Express 2005.
    Je précise que sous Linux, j'utilise g++ et un makefile, la compilation se passe sans erreurs ni warnings et que l'édition de liens est très correcte.
    En revanche sous Visual C++, c'est autre chose. En effet, après avoir résolu les problèmes de syntaxes, mon code compile sans erreurs ni warnings. L'ennui vient de l'édition de liens. Je me prend des erreurs telles celles-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1>moncode.obj : error LNK2005: "public: __thiscall TSetSeq::TSetSeq(void)" (??0TSetSeq@@QAE@XZ) already defined in TSetSeq.obj
    1>moncode.obj : error LNK2005: "public: __thiscall TSetSeq::~TSetSeq(void)" (??1TSetSeq@@QAE@XZ) already defined in TSetSeq.obj
    Pouvez-vous m'aider à résoudre ce problème ?
    Merci d'avance.

    @++

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    a priori tu n'as pas du utiliser des ifdef anti-inclusion voir faq:
    http://c.developpez.com/faq/vc/?page=IDE#PbWithHeaders
    avec vc2005 on peut utiliser un #pragma once à la place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // header.h 
    #pragma once

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 865
    Points : 4 860
    Points
    4 860
    Par défaut
    Hello farscape

    Merci de ta réponse, mais j'avais déjà inclus les ifdef :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #ifndef _TSETSEQ_H_
    #define _TSETSEQ_H_
     
    #include <vector>
    #include <string>
     
    #include <math.h>
    //#include <cstdlib>
     
    #include "TSeq.h"
    class TScoMat;
    class TBox;
     
     
    /**
     * class TSetSeq
     * 
     * This class defines a sequence set
     */
    class TSetSeq
    {
    //Blasblas
    } ;
     
    #endif
    Et malgré ça, j'ai toujours mes erreurs au linkage.
    De plus, où doit-on mettre le #pragma once ?
    Merci d'avance de tes réponses ainsi qu'aux autres forumeurs.

    @++

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    alors si ce n'est pas les includes c'est que tes classes sont définies deux fois .
    tu as vérifié les sources : TSetSeq.obj et moncode.obj ?


  5. #5
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    De plus, où doit-on mettre le #pragma once ?
    A mettre au début du *.h, mais comme Farscape le dit, il y a des doublons de définitions. Il faut scruter le code et particulièrement tes includes.

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    une possibilité d'erreur possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class TSetSeq
    {
    TSetSeq(){} // definit dans le .h 
    ~TSetSeq(){}
    };
    et dans le .cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    TSetSeq::TSetSeq() // redefinit dans le .cpp.
    {
     
    }
    TSetSeq:: ~TSetSeq()
    {
     
    }

  7. #7
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    je crois que c'est l'erreur qu'il souhaitait corriger lol

  8. #8
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 865
    Points : 4 860
    Points
    4 860
    Par défaut
    Pardon, mais je ne vois toujours pas l'erreur . Voici un extrait de mon header :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    class TSetSeq
    {
    private:  
     
       /**Number of sequences to store in the set**/
       unsigned long int NumSeq;
       /**Maximum value of sequences to store in the set**/
       unsigned long int MaxNumSeq;
       /**Pointer to a sequence**/
       TSeq::PTSeq Seq;
     
    public:
     
       /**A vector a sequence pointers**/
       typedef std::vector<TSetSeq> PTSetSeq;
     
       /**Constructor**/
       TSetSeq();
       /**Destructor**/
       ~TSetSeq();
    };
    et voici le code c++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include "TSetSeq.h"
     
    TSetSeq::TSetSeq()
    {
      Init();
    }
     
    TSetSeq::~TSetSeq()
    {
      Free();
    }
     
    void TSetSeq::Init()
    {
       NumSeq=0;   
       MaxNumSeq=0;
    }
     
    void TSetSeq::Free()
    {
       Seq.resize(0);
       Init();   
    }
    Je ne vois vraiment pas où peut être mon erreur.

    @++

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    ça correspond au source TSetSeq.ccp ?
    et dans le source moncode.cpp il doit y avoir une reference au constructeur et au destructeur de cette classe ..

  10. #10
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 865
    Points : 4 860
    Points
    4 860
    Par défaut
    Bon, j'ai trouvé, apparemment, c'était des inclusions de headers en trop que j'avais.
    Bon, encore 7 erreurs de linkages à résoudre et on pourra s'en aller

    @++ et merci de vos indications.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2012, 11h39
  2. Linker avec une DLL compilée avec MSVC6
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2006, 21h46
  3. utiliser une dll dans une dll
    Par anthonycosson dans le forum MFC
    Réponses: 2
    Dernier message: 09/05/2006, 21h42
  4. [VB] COmment compiler une dll dans un exe (zlib.dll)
    Par Khrysby dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/11/2005, 12h10
  5. [DLL] utiliser une DLL a partir d' une DLL et un .def
    Par venomelektro dans le forum MFC
    Réponses: 9
    Dernier message: 07/12/2004, 14h01

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