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 :

comment utiliser une library C avec g++


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut comment utiliser une library C avec g++
    salut à tous,
    j'essais de faire un truc tout bete : utiliser des fonctions d'une bibliotheque, mais voilà, je n'arrive pas à utiliser cette bibliotheque avec g++!

    en fait j'essais d'utiliser la library de cdparanoia.

    voici le petit programme que je veux compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <cdda_interface.h>
    #include <cdda_paranoia.h>
     
    int main(){
    	puts("calling library function test");
    	cdrom_drive *d=NULL;
    	  d=cdda_identify(NULL,CDDA_MESSAGE_PRINTIT,NULL);
      return 0;
    }
    donc j'essais juste d'appeler une des fonctions de la bibliotheque, ça ne sert a rien, mais c'est juste pour tester l'appel de fonction

    si je nomme le fichier testParano.c et que j'essais de le compiler avec gcc de la manière suivante tout marche :
    gcc testParano.c -o testParano -lcdda_interface -lcdda_paranoia -lm

    ça compile, et ça s'exécute normalement!

    par contre si je nomme le fichier testParano.cc ou testParano.cpp et que j'essais de le compiler avec g++ (ou meme avec gcc) ça ne fonctionne pas, j'obtiens le retour suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ g++ testParano.cpp -o testParano -lcdda_interface -lcdda_paranoia -lm
    /home/user1/tmp/cc8CaYsg.o: In function `main':
    testParano.cpp:(.text+0x3c): undefined reference to `cdda_identify(char const*, int, char**)'
    collect2: ld a retourné 1 code d'état d'exécution
    j'utilise mandriva 2007 et g++ v 4.2.2

    Quelqu'un voit où est-ce que je fais faux pas?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    C'est toujours pareil, c'est aussitot qu'on expose son probleme qu'on trouve la solution! si j'avais su j'aurais posté plus tôt

    donc en fait j'ai trouvé la solution en regardant les sources d'une autres library dont je me sert sans soucis, et j'ai découvert le extern "C"{}

    donc pour résoudre mon porblème j'ai édité les headers de ma library à savoir /usr/local/include/cdda_interface.h et /usr/local/include/cdda_paranoia.h

    et dans chacuns d'entre eux, j'ai rajouté ceci en début de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /*
    ** Make sure we can call this stuff from C++.
    */
    #ifdef __cplusplus
    extern "C" {
    #endif
    et ceci a la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    #ifdef __cplusplus
    }  /* End of the 'extern "C"' block */
    #endif
    Et maintenant tout marche nikel!!!

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Ne manquerait il pas un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifdef __cplusplus 
    extern "C" {      
    #endif
     
    int maFonctionEnC(void);
     
    #ifdef __cplusplus 
    }
    #endif
    Dans les fichiers inclus ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Points : 57
    Points
    57
    Par défaut
    Salut

    Tu peux ajouter le Extren C dans ton Header et utiliser seulement le #include "talib.h" dans ton code C++

    Pour plus d'info

    http://jlecomte.ifrance.com/c++/c++-...nd-cpp-fr.html

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par mabu Voir le message
    Bonjour,

    Ne manquerait il pas un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifdef __cplusplus 
    extern "C" {      
    #endif
     
    int maFonctionEnC(void);
     
    #ifdef __cplusplus 
    }
    #endif
    Dans les fichiers inclus ?
    non, c'est bon, la fonction était bien déclarée, il me manquait simplement le extern


    Citation Envoyé par getdz Voir le message
    Salut

    Tu peux ajouter le Extren C dans ton Header et utiliser seulement le #include "talib.h" dans ton code C++

    Pour plus d'info

    http://jlecomte.ifrance.com/c++/c++-...nd-cpp-fr.html
    OUUUUAAAAhh! trop bien la doc, c'est exactement ce que j'ai recherché pendant toute la journée

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 07/07/2009, 13h46
  2. Comment utiliser une base FireBird avec Delphi5
    Par cmali67 dans le forum Bases de données
    Réponses: 8
    Dernier message: 24/03/2009, 00h37
  3. Réponses: 15
    Dernier message: 23/03/2009, 16h07
  4. Comment utiliser une datasource JNDI avec JDBC?
    Par KING_OF_GRACELAND dans le forum JDBC
    Réponses: 6
    Dernier message: 08/04/2008, 18h18
  5. Comment utiliser une librarie .so (sous linux)
    Par philipina dans le forum Linux
    Réponses: 14
    Dernier message: 20/02/2007, 13h05

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