[SciPy-dev] cluster/src/vq_wrap.cpp not being compiled with C++

Pearu Peterson pearu at cens.ioc.ee
Wed Sep 4 17:25:54 EDT 2002


On Wed, 4 Sep 2002, Skip Montanaro wrote:

> I'm trying to build SciPy on a Solaris system (sunos 5.8) using Sun's C, C++
> and Fortran compilers.  I've fiddled and faddled 'til it got down to
> compiling .../scipy/cluster.  It goes to compile the vq_wrap.cpp file and
> tries compiling it with 'cc' instead of 'CC'.  Distutils generates this
> command:
> 
>     cc -DNDEBUG -O -I/home/skip/local/SunOS/include/python2.2 -c
>     cluster/src/vq_wrap.cpp -o build/temp.solaris-2.8-sun4u-2.2/vq_wrap.o 
> 
> which generates this message:
> 
>     cc: No input file specified, no output generated
> 
> If I simply change 'cc' to 'CC' it compiles fine.  I would have thought
> distutils would recognize the need to use 'CC' if the file extension was
> '.cpp'.  If I try running
> 
>     python setup.py build_ext --compiler=CC
> 
> distutils raises a PlatformError:
> 
>     don't know how to compile C/C++ code on platform 'posix' with 'CC'
>     compiler
> 
> I don't see anything like a command/build_cpplib.py file which might tell
> how to build C++ extensions.
> 
> Where should I be looking for clues?

This is a known problem with distutils that for compiling C++ extensions
certain hacks are needed. Here are some solutions that people have
suggested:

1) Build Python with C++ compiler

2) Edit python2.2/config/Makefile by changing CC variable and do something
with libpython2.2.a --- what exactly, I don't remember now, but I think it
is described in wxPython installation notes.

3) I use the following codelet in my C++ extension setup.py files that
you could modify to your needs easily:

#+++HACK: replace linker gcc with g++ +++++++++++
gpp_exe = 'g++'
gcc_exe = 'gcc'
from distutils import sysconfig
save_init_posix = sysconfig._init_posix
def my_init_posix():
    save_init_posix()
    g = sysconfig._config_vars
    for n,r in [('LDSHARED',gpp_exe),('CC',gcc_exe)]:
        if g[n][:3]=='gcc':
            print 'my_init_posix: changing %s = %r'%(n,g[n]),
            g[n] = r+g[n][3:]
            print 'to',`g[n]`
sysconfig._init_posix = my_init_posix
#++++++++++++++++++++++++++++++++++++++++++++++++
I like this hack because one does not need to mess with Python
defaults that would be not always desired or possible.

HTH,
Pearu




More information about the SciPy-Dev mailing list