[Numpy-discussion] CTypes: How to incorporate a library with shared library module?

David Cournapeau cournapeau at cslab.kecl.ntt.co.jp
Tue Feb 12 02:12:45 EST 2008


On Tue, 2008-02-12 at 16:05 +0900, David Cournapeau wrote:
> On Mon, 2008-02-11 at 23:14 -0700, Damian Eads wrote:
> > David Cournapeau wrote:
> > > On Mon, 2008-02-11 at 22:50 -0700, Damian Eads wrote:
> > >> Dear Lou,
> > >>
> > >> You may want to try using distutils or setuputils, which makes compiling 
> > >> extensions much easier. It does the hard work of finding out which flags 
> > >> are needed to compile extensions on the host platform. There are many 
> > >> examples on the web on how to use distutils to build C extensions 
> > >> (http://docs.python.org/ext/building.html).
> > > 
> > > Unfortunately, this does not work. Distutils only knows how to build
> > > python extensions, not shared libraries. Depending on the platform, this
> > > is not the same thing, and mac os X is such a platform where both are
> > > not the same.
> > > 
> > > cheers,
> > > 
> > > David
> > 
> > Really? distutils generates .so files for me, which I assume are shared 
> > libraries. 
> 
> That's correct. But python extensions are not shared libraries; more
> exactly: some systems make the different between libraries which are
> loaded when the executable is launched (dynamic linking), and libraries
> which are loaded dynamically (dynamic loading, through dlopen), possible
> in the middle of the execution. All python extensions fall in the later
> category.
> 
> It happens that on Linux (and most unices I know, mac os x being an
> exception), those are the same. But on mac os x (and windows), those are
> different: that's why you have .so and .dylib. dlopen does not really
> exist on mac os X, in the sense that it is a wrapper around the native
> linker/loader tools (and dlopen is not 100 % complete: you cannot
> unload/reload extensions I think on mac os X). Some of the differences
> are namespace (mac os X has the notion of a namespace for libraries,
> which I know nothing about; unices traditionally have a flat namespace
> for libraries), etc...
> 

If you are interested in knowing the difference between bundle and
dynamic libraries (mac os X), here is some info:

http://www.finkproject.org/doc/porting/porting.en.html#shared.lib-and-mod

David




More information about the NumPy-Discussion mailing list