The operator= stuff is usually innocuous.
The compiler died because it couldn't find 'vector', which is reasonable, since 
it thought it was compiling a C file.

Probably because you swigged the file without the magic "-c++" option -- I'm 
not sure how distutils passes arguments to swig, but if you do it from the 
command line, you'll do something like swig -c++ -python -I<path to python> 
<file> and it will generate a .cpp  file and a .py file, which will (hopefully) 
compile.

I'd focus on doing it manually, then getting distutils to work properly.



 

-----Original Message-----
From: Hyuga [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, February 27, 2008 10:01 AM
To: python-list@python.org
Subject: Re: first time use of swig, python and c++ .. it's a mess ... please 
advice

On Feb 26, 3:38 pm, Eric von Horst <[EMAIL PROTECTED]> wrote:
> Hi,
>
> we have a third-party product that has a C++ api on HP-UX.
>
> I would like be able to use the API in Python (as I remember Python is 
> good at doing this).
>
> I have no experience with this so I Googled and tried to find some 
> info on what I had to do.
>
> So, I installed Python 2.4.4 and Swig 1.3.33
>
> The header file to the library is '/opt/OV/include/opcsvcapi.h'.
>
> I created a SWIG file with the following content:
> "
> %module opcsvcapi
>  %{
>  /* Includes the header in the wrapper code */
>  #include "/opt/OV/include/opcsvcapi.h"
>  %}
>
>  /* Parse the header file to generate wrappers */
>  %include "/opt/OV/include/opcsvcapi.h"
> "
> Then I ran the cmd:
> # swig -c++ -python opcsvcapi.i
> with output:
> "
> /opt/OV/include/opcsvcapi.h:41: Warning(362): operator= ignored
> /opt/OV/include/opcsvcapi.h:46: Warning(503): Can't wrap 'operator 
> Type' unless renamed to a valid identifier.
> "
>
> The result are two files:
> opcsvcapi.py
> opcsvcapi_wrap.cxx
>
> I created a 'setup.py' file with the following content:
> "
> import distutils
> from distutils.core import setup, Extension
>
> setup(name = "opcsvcapi",
>       version = "1.0",
>       ext_modules = [Extension("_opcsvcapi",
> ["opcsvcapi.i","opcsvcapi.cxx"])])
> "
>
> Then I run: python setup.py build
>
> This results in an extra file:
> opcsvcapi_wrap.c and a 'build' directory
>
> and the following errors:
> "
> running build
> running build_ext
> building '_opcsvcapi' extension
> swigging opcsvcapi.i to opcsvcapi_wrap.c swig -python -o 
> opcsvcapi_wrap.c opcsvcapi.i creating build creating 
> build/temp.hp-ux-B.11.11-9000-800-2.4
> gcc -pthread -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict- 
> prototypes -fPIC -I/usr/local/include/python2.4 -c opcsvcapi_wrap.c -o 
> build/temp.hp-ux-B.11.11-9000-800-2.4/opcsvcapi_wrap.o
> In file included from /usr/local/include/python2.4/Python.h:8,
>                  from opcsvcapi_wrap.c:118:
> /usr/local/include/python2.4/pyconfig.h:851:1: warning:
> "_POSIX_C_SOURCE" redefined
> <command line>:1:1: warning: this is the location of the previous 
> definition In file included from opcsvcapi_wrap.c:2490:
> /opt/OV/include/opcsvcapi.h:12:18: error: vector: No such file or 
> directory In file included from opcsvcapi_wrap.c:2490:
> /opt/OV/include/opcsvcapi.h:15: error: expected '=', ',', ';', 'asm'
> or '__attribute__' before 'SvcAPI'
> opcsvcapi_wrap.c: In function 'Swig_var_SvcAPI_set':
> opcsvcapi_wrap.c:2505: error: 'SvcAPI' undeclared (first use in this
> function)
> opcsvcapi_wrap.c:2505: error: (Each undeclared identifier is reported 
> only once
> opcsvcapi_wrap.c:2505: error: for each function it appears in.)
> opcsvcapi_wrap.c:2505: error: 'namespace' undeclared (first use in 
> this function)
> opcsvcapi_wrap.c:2505: error: expected expression before ')' token
> opcsvcapi_wrap.c: In function 'init_opcsvcapi':
> opcsvcapi_wrap.c:3064: error: 'Swig_var_SvcAPI_get' undeclared (first 
> use in this function)
> error: command 'gcc' failed with exit status 1 "
>
> and that's it.
>
> Any idea what I am doing wrong?
>
> Any help much appreciated
>
> Kris

Well, the errors you got from the compiler are just confusing to me, but I 
suspect it goes back to the warning you got from SWIG.  Some class in there is 
overriding the = operator, but since that can't be done in Python, you need to 
give it some special instructions on how to handle that.

For example, if you have Foo::operator=, in your SWIG header include a line 
like:
%rename(assign) Foo::operator=

Then in the Python module, the Foo class will have an assign method.

Hyuga

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - -

This message is intended only for the personal and confidential use of the 
designated recipient(s) named above.  If you are not the intended recipient of 
this message you are hereby notified that any review, dissemination, 
distribution or copying of this message is strictly prohibited.  This 
communication is for information purposes only and should not be regarded as an 
offer to sell or as a solicitation of an offer to buy any financial product, an 
official confirmation of any transaction, or as an official statement of Lehman 
Brothers.  Email transmission cannot be guaranteed to be secure or error-free.  
Therefore, we do not represent that this information is complete or accurate 
and it should not be relied upon as such.  All information is subject to change 
without notice.

--------
IRS Circular 230 Disclosure:
Please be advised that any discussion of U.S. tax matters contained within this 
communication (including any attachments) is not intended or written to be used 
and cannot be used for the purpose of (i) avoiding U.S. tax related penalties 
or (ii) promoting, marketing or recommending to another party any transaction 
or matter addressed herein.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to