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 :

include headers c dans un prog en c++


Sujet :

C++

  1. #1
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut include headers c dans un prog en c++
    Bonjour,

    J'essaye d'utiliser vlc dans mon programme, j'ai trouvé sur un site que pour pouvoir includer des sources en c il fallait faire un extern "C" comme suit dans le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <windows.h>
     
    extern "C" {
       #include <vlc/libvlc.h>
    }
     
     
    int main() {
     
       return 0;
    }
    que je le fasse ou que je le fasse pas j'ai une erreur "...was not declred in this scope".

    Est-ce une erreur dûe au fait que le header soit en c et que mon compilateur compile du c++???
    Et comment résoudre cela?


    Merci!

  2. #2
    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
    euh stdio.h est un header C aussi :p

    plus sérieusement tu peux l'inclure sans passer par le extern "C"

  3. #3
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    plus sérieusement tu peux l'inclure sans passer par le extern "C"
    Je parle de l'include "#include <vlc/libvlc.h>" ligne 4 (sans compter les lignes vides).

    Justement j'ai fait un include "normal" et un include avec extern C et les deux me renvoient l'erreur : "...was not declred in this scope" qui pointe sur une ligne du header libvlc.h

    Est-ce que c'est une erreur dans le header?
    Est-ce qu'il faut faire une manip spéciale?

  4. #4
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Il y a vraiment trois petits points ? Ou tu écris cela parceque tu en a trop ?

  5. #5
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par valefor Voir le message
    Il y a vraiment trois petits points ? Ou tu écris cela parceque tu en a trop ?
    parceque je suis fainéant!

    Voila la totalité du message d'erreur :
    .\vlc\libvlc.h|33|warning: `vlc_key_to_action' initialized and declared `extern'|
    .\vlc\libvlc.h|33|error: `vlc_object_t' was not declared in this scope|
    .\vlc\libvlc.h|33|error: expected primary-expression before ',' token|
    .\vlc\libvlc.h|33|error: expected primary-expression before "const"|
    .\vlc\libvlc.h|34|error: `vlc_value_t' was not declared in this scope|

    ...

    .\vlc\libvlc.h|139|error: expected `;' before '*' token|
    .\vlc\libvlc.h|140|error: `vlc_mutex_t' does not name a type|
    .\vlc\libvlc.h|144|error: `vlc_thread_t' does not name a type|
    .\vlc\libvlc.h|145|error: `vlc_bool_t' does not name a type|
    ||More errors follow but not being shown.|
    ||Edit the max errors limit in compiler options...|
    ||=== Build finished: 50 errors, 2 warnings ===|
    les trois points au milieu c'est qu'il y'en a effectivement beaucoup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef LIBVLC_LIBVLC_H
    # define LIBVLC_LIBVLC_H 1
     
    extern const char vlc_usage[];
     
    /* Hotkey stuff */
    extern const struct hotkey libvlc_hotkeys[];
    extern const size_t libvlc_hotkeys_size;
    extern int vlc_key_to_action (vlc_object_t *, const char *,
                                  vlc_value_t, vlc_value_t, void *);
    La ligne 33 correspond à l'avant dernière ligne : "extern int vlc_key_to_action (vlc_object_t *, const char *,"

  6. #6
    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
    est ce que tu as linker la librairie correspondante ?

  7. #7
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Cela n'a pas l'air d'un problème de link mais bien de compilation.

    Il faudrait que tu trouves un autre projet qui utilise vlc pour voir les headers à inclure. Il t'en manque peut être.

    Autre piste, il faut définir une constante à la compile (option -D avec gcc), ou avant d'include le header (avec #define).

    Enfin, voir si dans le <vlc/libvlc.h> il n'y a pas des #ifndef __cplus_cplus (ou truc du style).

  8. #8
    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
    ca peut être un pb de link si les variables sont définis dans un .cpp qui a été compilé (maitenant je pense que c'est tordu de faire comme ca mais...)

  9. #9
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Pour répondre a valefor j'ai trouvé un tuto sur le site de vlc


    http://wiki.videolan.org/LibVLC_Tutorial_086c

    ci dessous le code qu'ils proposent :

    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
     
    #include <stdio.h>
    #include <windows.h>
    #include <vlc/libvlc.h>
     
    static void quit_on_exception (libvlc_exception_t *excp) {
       if (libvlc_exception_raised (excp)) {
          fprintf(stderr, "error: %s\n", libvlc_exception_get_message(excp));
          exit(-1);
       }
    }
     
    int main(int argc, char **argv) {
       libvlc_exception_t excp;
       libvlc_instance_t *inst;
       int item;
       char *myarg0 = "-I";  char *myarg1 = "dummy";
       char *myarg2 = "--plugin-path=c:\\program files\\videolan\\plugins";
       char *myargs[4] = {myarg0, myarg1, myarg2, NULL};
       char *filename = "c:\\video\\main\\Everybody_Hates_Chris_Feb_26.mpg";
     
       libvlc_exception_init (&excp);
       inst = libvlc_new (3, myargs, &excp);
       quit_on_exception (&excp);
       item = libvlc_playlist_add (inst, filename, NULL, &excp); 
       quit_on_exception (&excp);
       libvlc_playlist_play (inst, item, 0, NULL, &excp); 
       quit_on_exception (&excp);
       Sleep (10000);
       libvlc_destroy (inst);
       return 0;
    }
    et un makefile

    VLC_INST = "c:\program files\videolan"
    VLC_SRC = "c:\tools\vlc-0.8.6c\"
    demo: demo.c
    gcc -o demo demo.c -I$(VLC_SRC)/include \
    -L$(VLC_INST) -llibvlc
    Y'a pas de define en plus, je vois pas d'appel particulier.

  10. #10
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Tu as essayé de compiler le tuto (en c donc) ?

  11. #11
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Tu as essayé de compiler le tuto (en c donc) ?
    arghhh ca ce complique!!

    1) cf mon titre j'essaye de faire appel à des sources en c dans mon prog en c++

    2) j'ai des erreurs je poste sur le forum en demandant si y'a une manip spécial pour faire cohabiter les sources de libvlc en c avec du c++

    3) j'ai mis mon code en exemple (toujours mon premier post).

    4) vous m'aidez pour trouver une solution et je vous en remercie.

    4 bis) tu proposes (valefor) de rajouter un include
    Citation Envoyé par valefor
    Il faudrait que tu trouves un autre projet qui utilise vlc pour voir les headers à inclure. Il t'en manque peut être.
    5) je te montre un exemple en c que je n'ai pas essayé de compiler mais qui fait un simple appel a libvlc, en réponse à ta proposition.

    Mon but initial c'est de faire appel a libvlc dans mon programme en c++ donc j'essaye en faisant un simple include et j'ai des messages d'erreurs.

    Merci pour votre aide.

  12. #12
    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
    est ce que tu pourrais joindre une archive contenant tout (avec les sources et lib vlc !) comme ca je peux regarder ca cette aprem car je pense qu'on parle de choses mais pas des même

  13. #13
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Merci pour ton aide,

    les sources pour l'instant y'a pas grand chose de mon coté vu que c'est dans un but de test. Mon objectifs c'est de pouvoir accéder à l'api vlc via mon appli.

    mon appli se limite à ca, un appel a libvlc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <vlc/libvlc.h>
     
    int main() {
     
       return 0;
    }
    et les sources de vlc tu peux les trouver la :
    http://www.videolan.org/vlc/download-sources.html

    soit en tar.gz ou tar.bz2

  14. #14
    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
    et tu arrives à compiler rien qu'en testant avec le main ou non ?

  15. #15
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Par rapport à ta remarque grabriel (ton post #11), je te donne DES pistes à explorer. Ne te trouve pas désorienté. Tu prends/fais ce que tu veux avec ces idées.

    L'idée de partir du tutorial était d'appliquer la méthode :
    - je pars d'un truc qui marche
    - tant que ca marche je modifie petit à petit jusqu'à arriver à ce que je veux.

    Voila.

    Sur ce forum, outre des solutions techniques, on trouve aussi, parfois, des méthodes.

  16. #16
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par valefor Voir le message
    Par rapport à ta remarque grabriel (ton post #11), je te donne DES pistes à explorer. Ne te trouve pas désorienté. Tu prends/fais ce que tu veux avec ces idées.

    L'idée de partir du tutorial était d'appliquer la méthode :
    - je pars d'un truc qui marche
    - tant que ca marche je modifie petit à petit jusqu'à arriver à ce que je veux.

    Voila.

    Sur ce forum, outre des solutions techniques, on trouve aussi, parfois, des méthodes.
    Sauf que je suis à la phase 1 avec quelque chose qui ne marche pas!!

    Si on reprends mon code du premier message j'ai juste un #include <vlc/libvlc.h> y'en a d'autres mais c'est des restes que j'ai oublié d'enlever.

    Mais je reste sur un code modeste qui tient en 3 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <vlc/libvlc.h>
     
    int main() {
     
       return 0;
    }
    et que je n'arrive pas a compiler!

    J'essaye de comprendre le pourquoi des erreurs et je propose une piste qui peux être :" est-ce qu'il y'a une manip spéciale pour que je puisse faire un include de fichiers c via mon prog en c++?"

    Pour ca j'ai fait des recherches et j'ai trouvé un site qui me disait de rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    extern "C" {
       #include <vlc/libvlc.h>
    }
    Mais avec ou sans j'ai le même message d'erreur. Et hiko-seijuro de confirmer :
    Citation Envoyé par hiko-seijuro
    tu peux l'inclure sans passer par le extern "C"

    Voila ma méthode jusqu'à maintenant!

  17. #17
    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
    ca va te paraitre idiot mais c'est quoi ta commande compilation ? car chez moi ca marche parfaitement :s

  18. #18
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    ca va te paraitre idiot mais c'est quoi ta commande compilation ? car chez moi ca marche parfaitement :s
    Non ca me parait complètement censé!

    J'ai pas suffisement cherché de ce côté.

    ---Après avoir vérifié dans code::blocks les différents paramètres----

    Il y'avais dans les options de compilation un chemin avec un "." que j'ai forcément pas vu

    J'ai essayé en ligne de commande en rajoutant -I. et ça me génère la même erreur.

    Du coup je l'ai enlevé et ca compile bien!! (i.e. ça ne me retourne plus l'erreur)

    Merci à vous deux pour votre aide et votre temps!!

    désolé!!!

    Au moins j'ai eu le temps de bien lire toute la doc sur l'api de vlc, j'ai pas tant perdu mon temps que ça!!

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

Discussions similaires

  1. [compil] #include <header> ou #include <head
    Par guejo dans le forum MFC
    Réponses: 5
    Dernier message: 02/06/2004, 15h31
  2. Comment peut on integer des controles dans un prog opengl
    Par franck31400 dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/04/2004, 09h06
  3. [LG]tache en parrallèle dans un prog
    Par max_lupin dans le forum Langage
    Réponses: 4
    Dernier message: 25/02/2004, 18h38
  4. Réponses: 1
    Dernier message: 19/08/2003, 16h11
  5. [TP]Peut-on mettre un commande dos dans le prog?
    Par pierre olmes dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 24/05/2003, 22h28

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