[cairo] A20 7" tablet running linux w/ Cairo and keep encountering segmentation fault

BART FALZARANO bfalzarano at gmail.com
Thu Apr 3 17:49:49 PDT 2014

I have an A20 7" tablet that has Linux and Cairo loaded.  I wrote a small test program below and compiled and linked the program to an executable.  But any cairo c program I attempt to run results in a segmentation fault.
I've even tried the framebuffer code further below to have Cairo output to the Linux framebuffer but also results in a segmentation fault.  The segmentation faults occur at cairo_show_text (cr, "Hello, world"); and cairo_stroke (cr);

Both programs compile and link fine without errors.  Please let me know what I am doing wrong.  It is possible my environment is not setup correctly but any help would be appreciated.  

Best regards,

gcc -mcpu=cortex-a9 -I /usr/include/cairo/ -mfloat-abi=softfp -mfpu=neon -c cairo_fb_test4.c -o cairo_fb_test4.o
gcc -mcpu=cortex-a9 -L /usr/lib/python2.7/site-packages -lcairo -mfloat-abi=softfp -mfpu=neon -o cairotest4 cairo_fb_test4.o

#include <cairo.h>           
#include <cairo.h>

main (int argc, char *argv[])
        cairo_surface_t *surface =
            cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 240, 80);
        cairo_t *cr =
            cairo_create (surface);

        cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
        cairo_set_font_size (cr, 32.0);
        cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
        cairo_move_to (cr, 10.0, 50.0);
        cairo_show_text (cr, "Hello, world");

        cairo_destroy (cr);
        cairo_surface_write_to_png (surface, "hello.png");
        cairo_surface_destroy (surface);
        return 0;

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <cairo.h>

int main(){
	int fbfd = 0;
	struct fb_var_screeninfo vinfo;
	struct fb_fix_screeninfo finfo;
	long int screensize = 0;
	char* fbp = 0;
	cairo_t* cr;
	cairo_surface_t *surface;

	// open the frame buffer file for reading & writing
	fbfd = open ( "/dev/fb0", O_RDWR );
	if (!fbfd) {
		printf ("Error: can't open framebuffer device.\n");
		exit (1);
	printf ("The framebuffer device was opened successfully\n");

	if (ioctl (fbfd, FBIOGET_FSCREENINFO, &finfo)) {
		printf ("Error reading fixed information\n");
		close (fbfd);
		exit (2);

	if (ioctl (fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
		printf ("Error reading variable information\n");
		close (fbfd);
		exit (3);

	// print info about the buffer
	printf ("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);

	// calculates size
	screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;

	// map the device to memory 
	fbp = (char*) mmap (0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);

	if ((int)fbp == -1) {
		printf ("Error: failed to map framebuffer device to memory\n");
		close (fbfd);
		exit (4);

	printf ("The framebuffer device was successfully mapped to memory\n");

	surface = cairo_image_surface_create_for_data (fbp, CAIRO_FORMAT_ARGB32, 
		vinfo.xres, vinfo.yres, finfo.line_length); 
	cr = cairo_create (surface);
	cairo_move_to (cr, 100, 100);
	cairo_line_to (cr, 300, 300);
	cairo_stroke (cr);
	munmap (fbp, screensize);
	close (fbfd);
	return 0;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cairographics.org/archives/cairo/attachments/20140403/0708d175/attachment-0001.html>

More information about the cairo mailing list