[Pythonmac-SIG] Using distutils with XCode

Chris Barker Chris.Barker at noaa.gov
Mon Oct 3 18:39:43 CEST 2005


Paul Kinnane wrote:
> OK, I found I could compile and successfully import the test.c sample
> from http://www.nevada.edu/~cwebster/Python/MPWHOWTO/MPWHOWTO.html using
> the Darwin "python setup.py install" command.
> 
> However, I'm trying to compile a wrapper for the ode physics engine.
> The wrapper is call PyODE (http://pyode.sourceforge.net/) and I've
> successfully compiled it on the Windows platform and been able to import
> it into python.
> 
> Using "python setup.py install", I get a permissions error.  I assume
> there is a simply way for me to get the right access rights in Darwin to
> do an install?

sudo python setup.py install.

"sudo" is Super User Do. It will prompt you for a password, ans if you 
are an administrative user, you will get full administrative privileges 
for the command that follows. this is the standard OS-X way to do 
anything administrative from the command line.

By the way, I always do the build and install steps separately:

python setup.py build
sudo python setup.py install

It's best to do as little as possible as the super user.

>Anyway, doing a build and then manual install gives the

What's a "manual install", and how did you build? What exactly did you 
do? Which gcc are you using?

> following error when trying to import into Python...
> 
> ImportError:Failure linking new module: ode.so: Symbol not found:
> ___cxa_pure_virtual
> Reference from:ode.so
> Expected in:Flat namespace

>  Researching the web there was a
> lot of info about using g++ instead of gcc for linking etc, which coming
> from the Win platform was a little confusing.

I'm pretty sure that a properly written setup.py and distutils should 
take care of that for you, but I haven't written any setup.py scripts 
for C++ myself, so I don't know how. A couple years ago, however, I did 
have this kind of problem with a C++ file. In that case, it didn't 
actually use an C++ features, so I changed the syntax a little to make 
it C, and solved it that way, which isn't going to help you any. In that 
case the same file worked just fine on Linux, but he way, so OS-X is 
pickier for some reason. Here is the solution I was offered, that I 
never tried:

"""
This just came by on another mailing list. The problem is that the link 
step is done with "gcc", not "g++", so you have to add the C++ library 
by hand. The easiest is to add an extra_link_libraries (iirc) flag to 
the setup.py file.
"""

> 1) Is there any difference between compiling the extern library wrapper
> in gcc verses XCode?

No. Xcode is a front-end to gcc. However, it might be hard to make sure 
all the same flags are used.

> 2) If I can use gcc, should I only use gcc3.2?  (as recommended in some
> msg threads)

I'm still running OS-X 10.3, which uses gcc3.3, so I'm not sure. 
However, while it may not be strictly necessary, it's probably safer to 
use the same gcc as python was compiled with. When you start up python, 
the startup message should tell you.

> 3) Is defining ___cxa_pure_virtual in the link statement the correct way
> to resolve that problem?

I doubt it. It is in libstdc++. I've seen a message on the matplotlib 
that it isn't in all versions, however. I do find it in the version on 
my machine (6.0.3). Perhaps if you use the same gcc as python was 
compiled with, you'll be OK.

-Chris




-- 
Christopher Barker, Ph.D.
Oceanographer
                                     		
NOAA/OR&R/HAZMAT         (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker at noaa.gov


More information about the Pythonmac-SIG mailing list