<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>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.</div><div>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 <span class="Apple-style-span" style="font-family: Monaco; font-size: 12px; ">cairo_stroke (cr);</span></div><div><font class="Apple-style-span" face="Monaco"><br></font></div><div><font class="Apple-style-span" face="Monaco"><br></font></div><div><font class="Apple-style-span" face="Monaco">Both programs compile and link fine without errors.  </font><span class="Apple-style-span" style="font-family: Monaco; ">Please let me know what I am doing wrong.  It is possible my environment is not setup correctly but any help would be appreciated.  </span></div><div><font class="Apple-style-span" face="Monaco"><br></font></div><div><font class="Apple-style-span" face="Monaco">Best regards,</font></div><div><font class="Apple-style-span" face="Monaco">Bart</font></div><div><br></div><div>gcc -mcpu=cortex-a9 -I /usr/include/cairo/ -mfloat-abi=softfp -mfpu=neon -c cairo_fb_test4.c -o cairo_fb_test4.o</div><div>gcc -mcpu=cortex-a9 -L /usr/lib/python2.7/site-packages -lcairo -mfloat-abi=softfp -mfpu=neon -o cairotest4 cairo_fb_test4.o</div><div><br></div><div><div>#include <cairo.h>           </div><div>                                  </div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(12, 90, 21); ">#include <cairo.h></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(30, 57, 246); ">int</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">main (<span style="color: #1e39f6">int</span> argc, <span style="color: #1e39f6">char</span> *argv[])</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_surface_t *surface =</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">            cairo_image_surface_create (CAIRO_FORMAT_ARGB32, <span style="color: #1e39f6">240</span>, <span style="color: #1e39f6">80</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_t *cr =</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">            cairo_create (surface);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_select_font_face (cr, <span style="color: #ff1212">"serif"</span>, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_set_font_size (cr, <span style="color: #1e39f6">32.0</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_set_source_rgb (cr, <span style="color: #1e39f6">0.0</span>, <span style="color: #1e39f6">0.0</span>, <span style="color: #1e39f6">1.0</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_move_to (cr, <span style="color: #1e39f6">10.0</span>, <span style="color: #1e39f6">50.0</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_show_text (cr, <span style="color: #ff1212">"Hello, world"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_destroy (cr);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_surface_write_to_png (surface, <span style="color: #ff1212">"hello.png"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        cairo_surface_destroy (surface);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">        <span style="color: #1e39f6">return</span> <span style="color: #1e39f6">0</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">}</div></div></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(12, 90, 21); ">#include <unistd.h></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(12, 90, 21); ">#include <stdio.h></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(12, 90, 21); ">#include <fcntl.h></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(12, 90, 21); ">#include <linux/fb.h></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(12, 90, 21); ">#include <sys/mman.h></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(12, 90, 21); ">#include <cairo.h></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span style="color: #1e39f6">int</span> main(){</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">       </span><span style="color: #1e39f6">int</span> fbfd = <span style="color: #1e39f6">0</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #1e39f6">struct</span> fb_var_screeninfo vinfo;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #1e39f6">struct</span> fb_fix_screeninfo finfo;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #1e39f6">long</span> <span style="color: #1e39f6">int</span> screensize = <span style="color: #1e39f6">0</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">   </span><span style="color: #1e39f6">char</span>* fbp = <span style="color: #1e39f6">0</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">       </span>cairo_t* cr;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">     </span>cairo_surface_t *surface;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(27, 146, 40); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">   </span></span>// open the frame buffer file for reading & writing</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">     </span>fbfd = <span style="color: #1081b7">open</span> ( <span style="color: #ff1212">"/dev/fb0"</span>, <span style="color: #0c5a15">O_RDWR</span> );</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #1e39f6">if</span> (!fbfd) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(255, 18, 18); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">             </span></span><span style="color: #1081b7">printf</span><span style="color: #000000"> (</span>"Error: can't open framebuffer device.\n"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span><span style="color: #1081b7">exit</span> (<span style="color: #1e39f6">1</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(255, 18, 18); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">  </span></span><span style="color: #1081b7">printf</span><span style="color: #000000"> (</span>"The framebuffer device was opened successfully\n"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre"> </span><span style="color: #1e39f6">if</span> (<span style="color: #1081b7">ioctl</span> (fbfd, FBIOGET_FSCREENINFO, &finfo)) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(255, 18, 18); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">           </span></span><span style="color: #1081b7">printf</span><span style="color: #000000"> (</span>"Error reading fixed information\n"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">               </span><span style="color: #1081b7">close</span> (fbfd);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">          </span><span style="color: #1081b7">exit</span> (<span style="color: #1e39f6">2</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre"> </span><span style="color: #1e39f6">if</span> (<span style="color: #1081b7">ioctl</span> (fbfd, FBIOGET_VSCREENINFO, &vinfo)) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(255, 18, 18); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">           </span></span><span style="color: #1081b7">printf</span><span style="color: #000000"> (</span>"Error reading variable information\n"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">            </span><span style="color: #1081b7">close</span> (fbfd);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">          </span><span style="color: #1081b7">exit</span> (<span style="color: #1e39f6">3</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(27, 146, 40); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">   </span></span>// print info about the buffer</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #1081b7">printf</span> (<span style="color: #ff1212">"%dx%d, %dbpp\n"</span>, vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(27, 146, 40); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">      </span></span>// calculates size</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">  </span>screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / <span style="color: #1e39f6">8</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(27, 146, 40); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">  </span></span>// map the device to memory </div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">   </span>fbp = (<span style="color: #1e39f6">char</span>*) <span style="color: #1081b7">mmap</span> (<span style="color: #1e39f6">0</span>, screensize, <span style="color: #0c5a15">PROT_READ</span> | <span style="color: #0c5a15">PROT_WRITE</span>, <span style="color: #0c5a15">MAP_SHARED</span>, fbfd, <span style="color: #1e39f6">0</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">    </span><span style="color: #1e39f6">if</span> ((<span style="color: #1e39f6">int</span>)fbp == -<span style="color: #1e39f6">1</span>) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(255, 18, 18); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                </span></span><span style="color: #1081b7">printf</span><span style="color: #000000"> (</span>"Error: failed to map framebuffer device to memory\n"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">             </span><span style="color: #1081b7">close</span> (fbfd);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">          </span><span style="color: #1081b7">exit</span> (<span style="color: #1e39f6">4</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(255, 18, 18); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">   </span></span><span style="color: #1081b7">printf</span><span style="color: #000000"> (</span>"The framebuffer device was successfully mapped to memory\n"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; min-height: 16px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">       </span>surface = cairo_image_surface_create_for_data (fbp, CAIRO_FORMAT_ARGB32, </div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">           </span>vinfo.xres, vinfo.yres, finfo.line_length); </div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>cr = cairo_create (surface);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">     </span>cairo_move_to (cr, <span style="color: #1e39f6">100</span>, <span style="color: #1e39f6">100</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>cairo_line_to (cr, <span style="color: #1e39f6">300</span>, <span style="color: #1e39f6">300</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>cairo_stroke (cr);</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px"><span class="Apple-tab-span" style="white-space:pre">  </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #1081b7">munmap</span> (fbp, screensize);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #1081b7">close</span> (fbfd);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; color: rgb(30, 57, 246); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">    </span></span>return<span style="color: #000000"> </span>0<span style="color: #000000">;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Monaco; ">}</div></div></body></html>