(related to previous thread on wrapping C/C++ in Python, trying the
SWIG approach.)
Trying to map a C++ class to python, one method for now. Running the
following commands to "compile":
--------------------------------------
#!/usr/bin/env bash
MOD_NAME=Wavele t
swig -c++ -python -o ${MOD_NAME}_wra p.cpp ${MOD_NAME}.i
gcc -c++ -fPIC -c ${MOD_NAME}.cpp -o ${MOD_NAME}.o -I/usr/include/
python2.5 -I/usr/lib/python2.5
gcc -c++ -fPIC -c ${MOD_NAME}_wra p.cpp -o ${MOD_NAME}_wra p.o -I/usr/
include/python2.5 -I/usr/lib/python2.5
gcc -bundle -flat_namespace -undefined suppress -o _${MOD_NAME}.so $
{MOD_NAME}.o ${MOD_NAME}_wra p.o
--------------------------------------
The source code is:
--------------------------------------
Wavelet.h
--------------------------------------
#ifndef _WAVELET_H_
#define _WAVELET_H_
#include <iostream>
#include <vector>
using namespace std;
class Wavelet
{
public:
Wavelet(vector< doubletheV);
~Wavelet();
vector<doubleGe tDaub4Trans();
private:
vector<doublev;
};
#endif /*_WAVELET_H_*/
--------------------------------------
and Wavelet.cpp:
--------------------------------------
#include "wavelet.h"
Wavelet::Wavele t(vector<double theV)
{
this->v = theV;
}
Wavelet::~Wavel et()
{
// Nothing for now
}
vector<doubleWa velet::GetDaub4 Trans()
{
vector<doublere tV = vector<double>( );
retV.push_back( 3.14);
retV.push_back( 2.71);
retV.push_back( 1.62);
return retV;
// just to test the approach - everything in here I can fix later.
}
--------------------------------------
This seems to compile, but in python I get:
--------------------------------------
$ python
imPython 2.5.2 (r252:60911, Mar 30 2008, 22:49:33)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright" , "credits" or "license" for more information.
Traceback (most recent call last):>>import Wavelet
File "<stdin>", line 1, in <module>
File "Wavelet.py ", line 7, in <module>
import _Wavelet
ImportError: dlopen(./_Wavelet.so, 2): Symbol not found:
__ZNKSt11logic_ error4whatEv
Referenced from: /Users/paul/Desktop/Wavelet_SWIG_Cp p/_Wavelet.so
Expected in: flat namespace
-------------------------------------->>>
Any ideas or tips? SWIG seems very nice for simple C methods where you
pass an int and return an int, but I can't seem to figure out the
syntaxes etc for more complicated stuff - arrays, vector<T>, C++, ...
Appreciate any help!
Cheers,
Paul.