Skip to content Skip to sidebar Skip to footer

Wrapping A C++ Class In Python Using Swig

example.h: #ifndef EXAMPLE_H #define EXAMPLE_H class Math { public: int pi() const; void pi(int pi); private: int _pi; }; #endif example.cpp: #include 'example.h'

Solution 1:

I think the swig command should be "swig -c++ -python example.swig"

Solution 2:

There's not enough information here to be sure what's wrong, but I have two ideas for things you can try.

  1. Your g++ invocation is compiling a C source file as if it were C++. This is not guaranteed to work. Try instead

    gcc -I/usr/local/include/python2.6 -fPIC -c example_wrap.c
    gcc -I/usr/local/include/python2.6 -fPIC -c example.cpp
    g++ -shared example_wrap.o example.o -o example.so
    

    (yes, srsly, only use g++ for the link)

  2. If that doesn't work, compile example_wrap.c like this:

    gcc -I/usr/local/include/python2.6 -fPIC -c -save-temps example_wrap.c
    

That will fail the same way but will produce a file named example_wrap.i which is the result of preprocesing. It will be gigantic. Search that file for the function Swig_var_Math_get, and add to your question the complete text of that function (but nothing else).

Solution 3:

Thanks for your replay!

The -C++ option generated the C++ class for the wrapper. swig -c++ -v -python example.swig

I used g++ to compile the wrapper.

g++ -fPIC -c example.cpp example_wrap.cxx -I/usr/local/include/python2.6/

And the following command to buikd the shared object. Ofcourse, we need to remove the superflous includes (-I) and libraries (-L). The important flags are '-shared' and '-fPIC'.

g++ example_wrap.o example.o -L/u01/app/oracle/product/1020.full/lib  -I/usr/local/ssl/include  -L/usr/local/ssl/lib -lclntsh -lssl -lcrypto -ldl -L/usr/local/lib -L/lib64 -L/usr/local/lib/python2.6/ -lboost_system -lboost_filesystem -lboost_thread -lboost_date_time -lglog -lmodpbase64 -lpthread -ldl -lrt -shared -fPIC -o _example.so

Post a Comment for "Wrapping A C++ Class In Python Using Swig"