Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/01/2007, à 12:52

momofiant

utiliser une bibliotheque 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 car il ne retrouve meme plus la bibliotheque gvc.h !!! voici mes fichiers

/********demo.cpp********/

#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**************/

#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******************/

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

Hors ligne

#2 Le 05/01/2007, à 13:25

any

Re : utiliser une bibliotheque c dans un programme cpp

peut etre essayer de remplacer
#include <gvc.h> par
#include <graphviz/gvc.h>

#3 Le 05/01/2007, à 13:58

any

Re : utiliser une bibliotheque c dans un programme cpp

ou peut etre plutot modifier le makefile aulieu du demo.c !

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) -o $@ $^ $(LDFLAGS)

%.o:		%.cpp
	$(CC) -o $@ -c $< $(CFLAGS)

clean:
	rm -rf *.o *.*~

la ca devrait bien compiler .

#4 Le 05/01/2007, à 15:55

any

Re : utiliser une bibliotheque c dans un programme cpp

je viens de tester et ca compile mais erreur a l'execution sad
d'apres ce que j'ai pu lire il faut modifie le makefile et ajouter :

-Wl,--rpath -W1, `pkg-config libgvc --variable=libdir`

a LDFLAGS

et la ca compile et execute sans probleme.

CC=g++
CFLAGS=-Wall -O2 -g `pkg-config libgvc --cflags`
LDFLAGS=-Wl,--rpath -W1, `pkg-config libgvc --variable=libdir` `pkg-config libgvc --libs` 
OBJECTS=demo.o
TARGET=demo
all:	$(TARGET)
$(TARGET):	$(OBJECTS)
	$(CC) -o $@ $^ $(LDFLAGS)

%.o:		%.cpp
	$(CC) -o $@ -c $< $(CFLAGS)

clean:
	rm -rf *.o *.*~

#5 Le 06/01/2007, à 00:14

salut

Re : utiliser une bibliotheque c dans un programme cpp

Salut!

S'il s'agit d'un problème à l'édition des liens pendant la phase de compilation:

Pour inclure une bibliothèque C dans un programme C++, il faut aussi inclure les fichiers d'include correspondant à ta bibliothèque C dans un extern "C":
extern "C" {
#include <fichier_include.h>
}

Mes deux cents...