C++ extension and shared library with distutils

Wintersberger, Eugen eugen.wintersberger at desy.de
Tue Oct 28 07:09:27 EDT 2014


Hi folks
  I have a little problem with a Python extension and could not find a
good solution in the documentation. So hopefully someone here has a
clever idea. 

Here is the problem: I have two extensions written in C++ (bindings to
existing C++ code). Lets call this two extensions C and B which are part
of a larger package with parent A. So in the simplest case the
installation on Linux would somehow look like this
A/
  __init__.py
  B/
   __init__.py
   _b.so
  C/
   __init__.py
   _c.so

The extension C is optional but depends on B. In the code for C I would
like to use some utilities developed for B. The idea was to keep this
utility functions in a shared library and link B and C against this
library. Lets call this library libb_utils.so. The problem here is that
the code in libb_utils.so depends on the Python version used to build
the extensions so it is not possible to build a Python agnostic version
of the library. 

My idea now was to build extension B and in the same code tree build
libb_utils.so. The idea was to install this shared object along with the
extension and then link C against it. The new installation would look
like this

A/
  __init__.py
  B/ 
   __init__.py
   _b.so
   libb_utils.so

with header files for libb_utils.so in 

$PREFIX/include/pythonX.Y/A/B/

My hope is that I can do all this with distutils. Building and
installing the extension is trivial. But

1.) is there a better way to build a shared library with distutils
    than using the CCompiler submodule?
2.) is the way I am planning the installation of my code ok 
    or is there a better way (maybe even a kind of standard) to deal
    with such a situation. 

best regards and thanks in advance
  Eugen Wintersberger

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 230 bytes
Desc: This is a digitally signed message part
URL: <http://mail.python.org/pipermail/python-list/attachments/20141028/cc400db8/attachment.sig>


More information about the Python-list mailing list