first time use of swig, python and c++ .. it's a mess ... pleaseadvice

E

Eric von Horst

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
 
H

Hyuga

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::eek:perator=, in your SWIG header include a
line like:
%rename(assign) Foo::eek:perator=

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

Hyuga
 
B

Bronner, Gregory

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: (e-mail address removed)
Subject: Re: first time use of swig, python and c++ .. it's a mess ... please advice

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::eek:perator=, in your SWIG header include a line like:
%rename(assign) Foo::eek:perator=

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.
 
E

Eric von Horst

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: (e-mail address removed)
Subject: Re: first time use of swig, python and c++ .. it's a mess ... please advice

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

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::eek:perator=, in your SWIG header include a line like:
%rename(assign) Foo::eek:perator=

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.

That is indeed what I did.

A do get .cpp file. The thin is that if I run setup, the library is
again swigged but without the -c++ option (see original post)

but honestly, I don't know what to do after I have the .cpp file.

I could not find any docs that explained clearly how to compile if you
are using C++

The only thing I found was that it was not so straightforward

So, again, any help is very much appreciated
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top