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