David Pfau
David Pfau

Reputation: 813

Problems using graphviz as a library

I'm trying to use graphviz as a library for a C++ project, following the libguide provided here. However I'm having problems even compiling the examples in the appendix. When I try to compile demo.c using gcc I get the following output:

$ gcc -I/usr/local/Cellar/graphviz/2.28.0/include/ demo.c -L/usr/local/Cellar/graphviz/2.28.0/lib/ -lgvc -lgraph -lcdt
demo.c: In function ‘main’:
demo.c:14: error: ‘Agdirected’ undeclared (first use in this function)
demo.c:14: error: (Each undeclared identifier is reported only once
demo.c:14: error: for each function it appears in.)
demo.c:15: error: too many arguments to function ‘agnode’
demo.c:16: error: too many arguments to function ‘agnode’
demo.c:17: error: too many arguments to function ‘agedge’

Agdirected is found in cgraph.h, but if I change the includes in demo.c to

#include <graphviz/gvc.h>
#include <graphviz/cgraph.h>

Then all hell breaks loose (mostly conflicting declarations between the two headers). How can I include the necessary headers without the headache of all these conflicts?

Mac OS X 10.8.3, Graphviz 2.28.0, GCC 4.2.1

Upvotes: 3

Views: 1856

Answers (2)

Emden
Emden

Reputation: 336

The libguide you are using is the cgraph version, which assumes Graphviz 2.30 or later. With that version, the #define WITH_CGRAPH is already provided.

Upvotes: 2

David Pfau
David Pfau

Reputation: 813

It seems after some experimentation that adding the flag

#define WITH_CGRAPH

has the effect of including cgraph.h, which gets rid of the "'Agdirected' undeclared" error.

The other errors can be fixed by changing the command line option in gcc from -lgraph to -lcgraph

Upvotes: 1

Related Questions