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 :

Evoluer un projet C++ en ajoutant d'autres classes.


Sujet :

C++

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut Evoluer un projet C++ en ajoutant d'autres classes.
    Bonjour à tous,

    D'abord je travailler sur Unix Hoedic (ibm)

    Je veux évoluer un projet C/C++. J'ai téléchargé une librairie pour cette évolution. Les classes C++ de cette librairie reposent aussi sur un code C. Donc, cette librairie est C/C++. Après plusieurs tentatives vaines pour installer la librairie, une idée m'est venue, importer les deux sources C et C++, les compiler puis compliler tout le projet.

    Mais j'ai un problème, comment lier les fichiers C++ à ceux de C.

    Sachant que j'ai créé un répertoire C++ et un autre C. J'ai modifié le Milefile de mon projet pour qu'il puisse voir les librairie et les includes.

    Merci de votre aide.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Sans plus d'information sur ton environnement de développement c'est impossible de répondre.
    Tu parles de 'Milefile', c'est une erreur et tu veux dire 'Makefile' ?
    Qu'est-ce que tu entends par 'importer' ?

    Au passage on ne dit pas 'librairie' en français mais bibliothèque (comme le bâtiment, c'est un faux-ami).

    MAT.

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    L'édition de liens se fait de la même manière en C et en C++.
    C++ peut parfaitement faire usage de bibliothèques écrites en C.

  4. #4
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Mat007
    Salut,

    Sans plus d'information sur ton environnement de développement c'est impossible de répondre.
    Tu parles de 'Milefile', c'est une erreur et tu veux dire 'Makefile' ?
    Qu'est-ce que tu entends par 'importer' ?

    Au passage on ne dit pas 'librairie' en français mais bibliothèque (comme le bâtiment, c'est un faux-ami).

    MAT.
    Bonjour,

    Oui, c'etait une erreur de ma part, j'ai bien modifié le "Makefile".

    Je travaille sur:

    > uname -a
    Linux hoedic 2.6.5-7.139-pseries64 #2 SMP Wed Aug 24 00:35:54 CEST 2005 ppc64 ppc64 ppc64 GNU/Linux

    je pense que toutes les informations sont là.

    Je vous remercie infiniement.

    PS: OK pour librairie et batiment.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par mamid1706
    je pense que toutes les informations sont là.
    En fait j'attendais plus quelques chose comme : Makefile avec gcc

    C'est visiblement un problème de Makefile, pas vraiment de C++.
    Il ressemble à quoi ?

    MAT.

  6. #6
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Mat007
    En fait j'attendais plus quelques chose comme : Makefile avec gcc

    C'est visiblement un problème de Makefile, pas vraiment de C++.
    Il ressemble à quoi ?

    MAT.
    Bonjour,

    Le problème évolue.

    Je pense qu'il n y a pas de problème dans mon makefile. puisque j'ai réussi à compiler mon projet (Donc il compile bien les reperoire c et cpp tirés de la bibliothèque et génére bien des fichiers *.a dans /lib/). Mais c'est que maintenant, quand j'écris une méthode qui est dans C++ (après biensur avoir fait tous les includes nécéssaires), j'ai une erreur. Il ne voit pas la méthodes.

    le code est à peut preès celui-ci:

    #include "H5Cpp.h" /* Ce fichier inclu toutes les .h necessaire pour la compilation en particulier H5File.h */

    #ifndef H5_NO_NAMESPACE
    using namespace H5;
    #endif

    const string FILE_NAME( "SDS.h5" );

    ...

    H5File file( FILE_NAME, H5F_ACC_TRUNC );//Ligne 67


    L'erreur est:

    Main.C:67: undefined reference to `.H5::H5File::H5File(std::string const&, unsigned int, H5::FileCreatPropList const&, H5::FileAccPropList const&)'.


    J'espère que c'est suffisement clair.

    Merci beaucoup.

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    donne nous la définition de la macro H5F_ACC_TRUNC.

    Apparement le constructeur H5File que tu tente d'appeler n'est pas défini.

  8. #8
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par G-OnZa
    donne nous la définition de la macro H5F_ACC_TRUNC.

    Apparement le constructeur H5File que tu tente d'appeler n'est pas défini.
    H5F_ACC_TRUNC est juste un mode d'accès. HDF est format de fichier. La méthode créate est utiliser pour créer une fichier avec le mode d'accès H5F_ACC_TRUNC.

    Je n'ai pas en tête le détail de ce mode d'accès. Mais je pense que cela, à ce niveau, n'est pas vraiment important à le préciser. En fin je pense!!

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Ma remarque sur le constructeur tient toujours.
    Pour moi une erreur comme ca veut dire que tu déclare ton constructeur H5File dans ton .h, mais qu'il n'est pas défini (dans ton .cpp ou .hpp).

  10. #10
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par G-OnZa
    Ma remarque sur le constructeur tient toujours.
    Pour moi une erreur comme ca veut dire que tu déclare ton constructeur H5File dans ton .h, mais qu'il n'est pas défini (dans ton .cpp ou .hpp).
    Mais j'ai tous dans les fichiers et .h et .cpp.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    /*********************************************************
                                                        H5File.h
    *********************************************************/
    class H5_DLLCPP H5File : public IdComponent, public CommonFG {
       public:
    	// Creates or opens an HDF5 file.
    	H5File( const char* name, unsigned int flags,
    	   const FileCreatPropList& create_plist = FileCreatPropList::DEFAULT,
    	  const FileAccPropList& access_plist = FileAccPropList::DEFAULT );
    	H5File( const string& name, unsigned int flags,
    	   const FileCreatPropList& create_plist = FileCreatPropList::DEFAULT,
    	 const FileAccPropList& access_plist = FileAccPropList::DEFAULT );
     
    /********************************************************
                   H5File.C (.C (grand c) c'est analogue à .cpp)
    ********************************************************/
     
    H5File::H5File() : IdComponent() {}
     
    //----------------------------------------------------------------------
     
    H5File::H5File( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : IdComponent()
    {
       p_get_file(name, flags, create_plist, access_plist);
    }
     
    //----------------------------------------------------------------------
     
    H5File::H5File( const string& name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : IdComponent()
    {
       p_get_file(name.c_str(), flags, create_plist, access_plist);
    }
     
    //----------------------------------------------------------------------
    void H5File::p_get_file(const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist)
    {
     ...
    }
     
    //----------------------------------------------------------------------
    C'est quand je n'écris rien dans le main, mon projet compile. Les sources de ces librairies (C et C++) compilent aussi toutes seules.

    D'autre part, ce code est pris dans une bibliothèque qui marche. Je l'ai même essayé. et ça a marché. Mais quand il s'agit de l'intégrer dans mon projet...là j'ai ces erreurs

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Ta classe est dans l'espace de nom H5 ? Si oui dans ton .C tu devrai avoir (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     H5::H5File::H5File( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : IdComponent()
    {
       p_get_file(name, flags, create_plist, access_plist);
    }
    // avec une macro c'est plus beau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #define H5FILE H5::H5File
    ...
     
    H5FILE::H5File( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : IdComponent()
    {
       p_get_file(name, flags, create_plist, access_plist);
    }
     
    ...
    #undef H5FILE

  12. #12
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par G-OnZa
    Ta classe est dans l'espace de nom H5 ? Si oui dans ton .C tu devrai avoir (par exemple)
    [/CODE]
    voilà ce que j'ai au début de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    #ifndef H5_NO_NAMESPACE
    namespace H5 {
    #endif
     
    ...
    Je pense que la bibliothèque est très bien programmée...Je ne pense pas qu'il y ait une erreur dans sa programmation. Puisque je l'ai déjà excuter toute seule dans un petit programme...

  13. #13
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Par contre dans le message d'erreur, il y a un truc que je comprends pas. Qui veut peut être dire beaucoup de choses:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Main.o(.text+0x1610): In function `main':
    /Main/Main.C:66: undefined reference to `.H5check_version'
    Main.o(.text+0x162c):/Main/Main.C:66: undefined reference to `.H5::H5File::H5File(std::string const&, unsigned int,H5::FileCreatPropList const&, H5::FileAccPropList const&)'
    Main.o(.text+0x16c8):/Main/Main.C:135: undefined reference to `.H5::H5File::~H5File()'
    Main.o(.data+0x4b0): In function `__init__16()':
    /usr/include/g++/iostream:77: undefined reference to `H5::H5File::~H5File()'
    Main.o(.toc+0xc0): In function `__init__0()':
    /usr/include/g++/iostream:77: undefined reference to `H5::FileCreatPropList::DEFAULT'
    Main.o(.toc+0xc8):/usr/include/g++/iostream:77: undefined reference to `H5::FileAccPropList::DEFAULT'
    Main.o(.toc+0xe0): In function `__init__20()':
    /usr/include/g++/iostream:77: undefined reference to `H5::H5File::~H5File()'
    gmake: *** [figaro2007] Error 1
    Je ne comprends pas
    /usr/include/g++/iostream:77
    Sachant que je n'ai pas de droits dans cet endroit de la machine.

  14. #14
    Membre régulier
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Points : 76
    Points
    76
    Par défaut
    Aucune aide

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Ca ressemble bigrement à un oubli d'une bibliothèque lors de la phase finale d'édition des liens.
    Quelle est la ligne de commande qui précède les erreurs de type 'undefined reference to xyz' ? Comment s'appelle le .a qui contient ces références ? Par exemple si c'est libH5.a Il faut un -lH5 sur la ligne de commande.

    MAT.

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/07/2006, 15h07
  2. Réponses: 5
    Dernier message: 20/05/2006, 10h15
  3. Réponses: 10
    Dernier message: 02/02/2006, 11h42
  4. [NetBeans] Ajouter un fichier class dans un projet
    Par Ashgenesis dans le forum NetBeans
    Réponses: 14
    Dernier message: 16/12/2005, 01h25
  5. [Plateforme.NET]Comment ajouter un autre langage ?
    Par reggae dans le forum Framework .NET
    Réponses: 4
    Dernier message: 14/12/2005, 22h16

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