Hi,

I am stuck on the following dynamic linking problem: python-expat has
a pyexpat.so module that contains a complete expat implementation
(1.95.8). Now there is the _cairo.so python that depends on
libcairo.so and libfreetype.so (found in /usr/X11R6/lib) which in turn
is linked to /usr/X11R6/lib/libexpat.so.5.0 (1.95.6). With python on
amd64...

>>> import pyexpat; import cairo

... seems to work (maybe not for long though), but...

>>> import cairo; import pyexpat

... segfaults during pyexpat importation, because pyexpat init code
calls an XML_* function that is resolved in libexpat.so.5.0 (dlopen-ed
by cairo.so) instead of pyexpat.so.

The funny thing is that problem does not happen on powerpc. So, I
suspect that this is a "feature" of the dynamic linker, using a wrong
search path for symbols on amd64. I have tried to investigate a bit
but I am not knowledgeable enough about the linking business. Anyway,
I have traced of the ld.so activity for the different cases: (names
are <platform>-<fisrt import>-<second import>)

http://ekyo.nerim.net/openbsd/

The segfault happens at pyexpat.c:1970 "MYCONST(XML_ERROR_UNBOUND_PREFIX);".
XML_ErrorString() returns NULL in /usr/X11R6/lib/libexpat.so.5.0,
crashing strlen later.

Eric.

Reply via email to