[Python-Dev] [droux@tuks.co.za: Our application doesn't work with Debian packaged Python]

Guido van Rossum guido@python.org
Tue, 16 Jan 2001 23:16:48 -0500


> This message was on the debian-python list.  Does anyone know why
> the patch is needed?

> -		handle = dlopen(pathname, RTLD_LAZY);

> +		handle = dlopen(pathname, RTLD_LAZY | RTLD_GLOBAL);

This comes back every once in a while.  It means that they have an
module whose shared library implementation exports symbols that are
needed by another shared library (probably another module).

IMO this approach is evil, because RTLD_GLOBAL means that *all*
external symbols defined by any module are exported to all other
shared libraries, and this will cause conflicts if the same symbol is
exported by two different modules -- which can happen quite easily.
(I don't know what happens on conflicts -- maybe you get an error,
maybe it links to the wrong symbol.)

The proper solution would be to put the needed entry points beside the
init<module> entry point in a separate shared library.  But that's
often not how quick-and-dirty extension modules are designed...

--Guido van Rossum (home page: http://www.python.org/~guido/)