py2cairo - 'import cairo' fails with linking error

Jay Hendren <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
I'm attempting to install py2cairo on top of local builds of python,
cairo, freetype, and a whole slew of other dependencies.  I was able
to successfully compile py2cairo and it appears to be properly linked
with all necessary shared object files.  But when I try to use py2cairo,
I get a linker error:

    [arlsrv2 ~]% which python
    /usr/local/python/bin/python
    [arlsrv2 ~]% python
    Python 2.7.1 (r271, Jun 14 2011, 11:40:39) 
    [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import cairo
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/py2cairo/lib/python2.7/site-packages/cairo/__init__.py", line 1, in <module>
        from _cairo import *
    ImportError: /usr/local/cairo-1.12.16/lib/libcairo.so.2: undefined symbol: FT_Library_SetLcdFilter

Cairo is complaining about the freetype library, which it links against.
Support for the LCD filter is not built into the system freetype library,
but it is build into my local build of the freetype library.

If I run ldd against the cairo library that the python importer is
complaining about, I can see that it appears to be linked properly to
my custom freetype build in /usr/local:

    [arlsrv2 ~]% ldd /usr/local/cairo-1.12.16/lib/libcairo.so.2
    	linux-vdso.so.1 =>  (0x00007fff779fd000)
    	libpixman-1.so.0 => /usr/local/pixman-0.29.4/lib/libpixman-1.so.0 (0x00002aef7aa52000)
    	libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00002aef7ad2d000)
    	libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x00002aef7af61000)
    	libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x00002aef7b185000)
    	libX11.so.6 => /usr/lib64/libX11.so.6 (0x00002aef7b38f000)
    	libXext.so.6 => /usr/lib64/libXext.so.6 (0x00002aef7b69b000)
    	libz.so.1 => /lib64/libz.so.1 (0x00002aef7b8ac000)
    	librt.so.1 => /lib64/librt.so.1 (0x00002aef7bac1000)
    	libfreetype.so.6 => /usr/local/freetype-2.4.12/lib/libfreetype.so.6 (0x00002aef7bcca000)
    	libm.so.6 => /lib64/libm.so.6 (0x00002aef7bf58000)
    	libc.so.6 => /lib64/libc.so.6 (0x00002aef7c1dc000)
    	/lib64/ld-linux-x86-64.so.2 (0x0000003726200000)
    	libexpat.so.0 => /lib64/libexpat.so.0 (0x00002aef7c535000)
    	libXau.so.6 => /usr/lib64/libXau.so.6 (0x00002aef7c758000)
    	libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00002aef7c95b000)
    	libdl.so.2 => /lib64/libdl.so.2 (0x00002aef7cb60000)
    	libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aef7cd64000)
    	libbz2.so.1 => /usr/lib64/libbz2.so.1 (0x00002aef7cf81000)
    [arlsrv2 ~]%

If I add the directory containing my local libfreetype to my run-time library search path, linking succeeds:

    [arlsrv2 ~]% export LD_LIBRARY_PATH=/usr/local/freetype-2.4.12/lib
    [arlsrv2 ~]% python
    Python 2.7.1 (r271, Jun 14 2011, 11:40:39) 
    [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import cairo
    >>> 

Based on the evidence at hand, it would appear that the run-time linker
is somehow not searching the right path from within the python importer.

I've done my best to fix this, but I'm stymied - cairo was compiled with
-Wl,-rpath=/usr/local/freetype-2.4.12/lib , so the linker should be using
an absolute path rather than a library name in order to locate the
freetype library.

Any help fixing this would be immensely appreciated.

Thanks,

Jay
-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.