[Distutils] Dynamic linking on Linux, Mac OS, et al

Bob Ippolito bob at redivi.com
Sat Jan 7 07:20:48 CET 2006


On Jan 6, 2006, at 9:55 PM, Phillip J. Eby wrote:

> At 12:59 PM 1/7/2006 +0800, Jeff Pitman wrote:
>>  If you need .so that's built and exported by the same packaged  
>> egg, you
>> may just consider installing it in a more benign area such as /usr/ 
>> local/lib.
>
> As I mentioned before, this breaks multi-version support, although I
> suppose one could perhaps force the egg version to always be  
> included in
> the filename...  that would lead to some interesting problems as  
> far as
> keeping the build area clean, though!  You'd have to run a "clean -- 
> all"
> whenever the version number changed, and the extensions using the  
> library
> would have to refer to the exact version.
>
> Unfortunately, this would *still* require users to mess with
> LD_LIBRARY_PATH in order to use private library versions, and so isn't
> particularly useful.  Some variant of the "patch the extensions'  
> runtime
> path at installation/cache extraction time" approach would still be  
> necessary.
>
> There is actually a hook in pkg_resources whose purpose was to support
> doing this kind of thing with any code resources extracted to the egg
> cache, so it's probably doable, and I could probably also make the  
> code
> usable by easy_install during egg unpacking.  It pretty much means the
> "unzip the egg manually" concept is a dead duck when libraries are
> involved, though.  You could only safely unpack an egg using a
> manually-created ResourceManager with an appropriate extraction  
> path base.
>
> On Mac OS there's an option to automatically pad the rpath area,  
> but on
> other OSes I'd need to do the padding myself by supplying an extra- 
> long
> rpath entry that could then be overwritten during the extraction  
> process.

IIRC, you can't set that any DYLD environment variables after the  
process has started... has to happen before main() is even called.

> What bothers me about all of this is that moving an installed egg then
> *breaks* it, because the rpath is now hard-wired.  Sigh.  Ironically
> enough, an egg containing a shared library would then need to be  
> labeled as
> "not unzip safe", i.e., it's really only safe to use if it remains
> zipped.  A new category of egg, to be sure.  :)
>
> Interestingly, this is one of the few times where I have to say that
> Windows is actually better-designed than Unix.  Sure, the same design
> choice enables all other sorts of DLL hell, but on this very narrow
> specific issue Windows kicks ass.  :)

Well, it's not really the design that's better, just the defaults...  
for a questionable definition of better :)

-bob



More information about the Distutils-SIG mailing list