[cairo] Cairo win32 Static linking

John Emmas johne53 at tiscali.co.uk
Sun Feb 2 03:00:19 PST 2014

On 01/02/2014 17:08, WC Black wrote:
> I'm having trouble linking to cairo-static.
> I'm on windows compiling with VC. I compiled cairo myself using msys 
> and VC.
> I get many of these:
> error LNK2019: unresolved external symbol __imp__cairo_create
> error LNK2019: unresolved external symbol __imp__cairo_destroy
> etc.

According to 'src/cairo.h' you need to define CAIRO_WIN32_STATIC_BUILD 
if you've built cairo statically.  However, it looks like you'll need to 
define that for any library which links to cairo (i.e. rather than 
defining it when building cairo itself). Defining that preprocessor 
directive will ensure that 'cairo-public' is correctly defined for those 
libraries which link to cairo - BUT -

What's interesting (admittedly from just a cursory glance) is that in 
'src/cairoint.h', when building with MSVC, 'cairo_public' is defined as 
__declspec(dllexport).  So when you build cairo statically it's probably 
just a happy accident if the library's symbols end up correct (i.e. the 
compiler was clever enough to realise that a static library can't have 
dllexported symbols).

Try defining CAIRO_WIN32_STATIC_BUILD for any libraries where you're 
seeing those unresolved externals.  You'll need to rebuild those libs 
but hopefully, the errors will go away.

A silly question but....  why do you need cairo to be a static lib anyway?


More information about the cairo mailing list