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 :

compiler du code c dans un programme cpp


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 4
    Par d�faut compiler du code c dans un programme cpp
    Slt, je dois utiliser graphviz (bibliotheque c) dans un programme cpp comme une bibliotheque. Je sais que je dois utiliser extern "C" mais je ne sais pas pourquoi �a ne focntionne pas, je dois mal faire quelque chose !!! voici mes fichiers

    /********demo.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
    42
    43
    #include <gvc.h>
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
     
    int main(int argc, char **argv)
    {
     
       Agraph_t *g;
       Agnode_t *n, *m;
       Agedge_t *e;
       Agsym_t *a;
       GVC_t *gvc;
       /* set up a graphviz context */
       gvc = gvContext();
       /* parse command line args - minimally argv[0] sets layout engine */
       gvParseArgs(gvc, argc, argv);
       /* Create a simple digraph */
       g = agopen("g", AGDIGRAPH);
       n = agnode(g, "n");
       m = agnode(g, "m");
       e = agedge(g, n, m);
       /* Set an attribute - in this case one that affects the visible rendering */
       agsafeset(n, "color", "red", "");
       /* Compute a layout using layout engine from command line args */
       gvLayoutJobs(gvc, g);
       /* Write the graph according to -T and -o options */
       gvRenderJobs(gvc, g);
       /* Free layout data */
       gvFreeLayout(gvc, g);
     
        /* Free graph structures */
        agclose(g);
        /* close output file, free context, and return number of errors */
        return (gvFreeContext(gvc));
    }
     
     
    #ifdef __cplusplus
    }
    #endif
    /***********gvc.h**************/

    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
    #ifndef                 GVC_H
    #define                 GVC_H
     
    #include "types.h"
    #include "graph.h"
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    #define dotneato_initialize dotneato_initialize_DEPRECATED_BY_gvParseArgs
    #define parse_args parse_args_DEPRECATED_BY_gvParseArgs
     
    [...]
     
    #ifdef __cplusplus
    }
    #endif
    #endif                  /* GVC_H */
    /*************Makefile******************/

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CC=g++
    CFLAGS=-Wall -o2 -g `pkg-config libgvc --cflags`
    LDFLAGS=`pkg-config libgvc --libs`
    OBJECTS=demo.o
    TARGET=demo
    all:    $(TARGET)
     
    $(TARGET):      $(OBJECTS)
           $(CC) $(LDFLAGS) -o $(TARGET) $(OBJECTS)
    clean:
           rm -rf *.o *.*~
    /*********Erreurs de compilation****************/

    @debian:~/Desktop/Projet/graphviz/graph_cpp$ make
    g++ -c -o demo.o demo.cpp
    demo.cpp:1:17: error: gvc.h: Aucun fichier ou r�pertoire de ce type
    demo.cpp: In function 'int main(int, char**)':
    demo.cpp:11: error: 'Agraph_t' was not declared in this scope
    demo.cpp:11: error: 'g' was not declared in this scope
    demo.cpp:12: error: 'Agnode_t' was not declared in this scope
    demo.cpp:12: error: 'n' was not declared in this scope
    demo.cpp:12: error: 'm' was not declared in this scope

  2. #2
    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
    Par d�faut
    Je sais que je dois utiliser extern "C"
    Tu sais mal.
    extern "C" d�sactive juste le "name mangling" pour du linkage avec C.
    �a s'utilise exclusivement
    - dans les ent�tes des biblioth�ques C (si tes ent�tes ne le font pas d�j�, tu peux le faire autour de leur #include)
    - quand tu veux cr�er une biblioth�que en C++ avec une interface C (ce qui est d'ailleurs n�cessaire pour la plupart des syst�mes de biblioth�ques dynamiques)

    Comme tu aurais du le voir si tu avais lu ton message d'erreur, le probl�me c'est qu'il n'y a pas de gvc.h dans ton include path.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Int�grer un code assembleur dans un programme
    Par laracroft87 dans le forum C
    R�ponses: 5
    Dernier message: 27/04/2008, 18h15
  2. Comment scanner des codes barre dans un programme ?
    Par looping dans le forum Langage
    R�ponses: 7
    Dernier message: 08/12/2007, 08h14
  3. integrer du code perl dans un programme java
    Par alphonse62 dans le forum API standards et tierces
    R�ponses: 4
    Dernier message: 07/05/2007, 07h17
  4. R�ponses: 4
    Dernier message: 22/04/2007, 08h31
  5. introduire du code assembleur dans un programme C++
    Par hzaki1986 dans le forum C++
    R�ponses: 1
    Dernier message: 14/04/2007, 17h14

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