[SciPy-user] FYI: C++ Extensions for Python

Prabhu Ramachandran prabhu_r at users.sf.net
Tue Nov 2 03:40:34 CST 2004


>>>>> "DG" == David Grant <david.grant at telus.net> writes:

    DG> Prabhu Ramachandran wrote:
    >> This is a common thing you'd need to do with any other approach
    >> as well since all of them would link to your C++ code.  Plus,
    >> building a library out of .o's is straightforward.
    >>
    DG> Actually you're probably right.  I was trying to do it with
    DG> full automake/autoconf/configure support and that was what I
    DG> was getting bogged down in.  I guess making a library is the
    DG> same as is done with swig right?  Just call g++ with the
    DG> -shared argument?

Its easier with SCons.  Here is an untested example to give you a
taste:

# ------------------------------
import glob

ccflags = '-Wall -O3 -ggdb' # and whatever else
inc_dirs = ['.', 'sub_dir/']
lib_dirs = ['/usr/X11R6/lib', '.']

env = Environment(CCFLAGS = ccflags, CPPPATH=inc_dirs,
                  LIBPATH=lib_dirs)

# If you want to build with SWIG support use something like this
# instead.
env = Environment(CCFLAGS = ccflags, CPPPATH=inc_dirs,
                  LIBPATH=lib_dirs, SWIGFLAGS='-c++ -python ')

lib_src = glob.glob('src/*.c')
# Build a shared library from these sources.
env.SharedLibrary(target='my_library', source=lib_src)

# Now build main.c
libs = ['lapack', 'atlas', 'my_library']
env.Program(target='main', source='main.c', LIBS=libs)

# Then for a swig module:
env.SharedLibrary('_foo.so', 'foo.i', LIBS=libs)
# ------------------------------

Obviously there are more options, but this shows you the basics of a
library, executable and a swig shared module.

cheers,
prabhu



More information about the SciPy-user mailing list