[cairo] help to compile an example pangocairo.h

andrew james andrew at systemssingular.com
Thu Sep 16 23:24:42 PDT 2010

I only wanted to try this short example, that fails to 
compile.  No compile instructor was written in the example, 
I tried until an hour but the error is 'undefined reference' 
to a few functions in 'pangocairo.h'


/tmp/ccvDU65O.o: In function `draw_text':
/programs/c/pango4.c:20: undefined reference to 
/programs/c/pango4.c:37: undefined reference to 
/programs/c/pango4.c:40: undefined reference to 
collect2: ld returned 1 exit status

from compile instructor that I wrote after some research

gcc -Wall -g -I/usr/include/cairo -lcairo 
-I/usr/include/pango-1.0 -lpango-1.0 
-I/usr/lib/glib-2.0/include -I/usr/include/glib-2.0 pango4.c 
-o pango4

I am novice but after research started to think this is not 
my fault, hopefully someone at this list can help

code was from a pango cairo tutorial 

#include <math.h>
#include <pango/pangocairo.h>
static void
draw_text (cairo_t *cr)
#define RADIUS 150
#define N_WORDS 10
#define FONT "Sans Bold 27"
   PangoLayout *layout;
   PangoFontDescription *desc;
   int i;
   /* Center coordinates on the middle of the region we are 
   cairo_translate (cr, RADIUS, RADIUS);
   /* Create a PangoLayout, set the font and text */
   layout = pango_cairo_create_layout (cr);
   pango_layout_set_text (layout, "Text", -1);
   desc = pango_font_description_from_string (FONT);
   pango_layout_set_font_description (layout, desc);
   pango_font_description_free (desc);
   /* Draw the layout N_WORDS times in a circle */
   for (i = 0; i < N_WORDS; i++)
       int width, height;
       double angle = (360. * i) / N_WORDS;
       double red;
       cairo_save (cr);
       /* Gradient from red at angle == 60 to blue at angle 
== 240 */
       red   = (1 + cos ((angle - 60) * G_PI / 180.)) / 2;
       cairo_set_source_rgb (cr, red, 0, 1.0 - red);
       cairo_rotate (cr, angle * G_PI / 180.);
       /* Inform Pango to re-layout the text with the new 
transformation */
       pango_cairo_update_layout (cr, layout);
       pango_layout_get_size (layout, &width, &height);
       cairo_move_to (cr, - ((double)width / PANGO_SCALE) / 
2, - RADIUS);
       pango_cairo_show_layout (cr, layout);
       cairo_restore (cr);
   /* free the layout object */
   g_object_unref (layout);
int main (int argc, char **argv)
   cairo_t *cr;
   char *filename;
   cairo_status_t status;
   cairo_surface_t *surface;
   if (argc != 2)
       g_printerr ("Usage: cairosimple OUTPUT_FILENAME\n");
       return 1;
   filename = argv[1];
   surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
					2 * RADIUS, 2 * RADIUS);
   cr = cairo_create (surface);
   cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
   cairo_paint (cr);
   draw_text (cr);
   cairo_destroy (cr);
   status = cairo_surface_write_to_png (surface, filename);
   cairo_surface_destroy (surface);
   if (status != CAIRO_STATUS_SUCCESS)
       g_printerr ("Could not save png to '%s'\n", filename);
       return 1;
   return 0;


More information about the cairo mailing list