Paul Anton Letnes schrieb: > Hello guys, > > > (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=Wavelet > > > swig -c++ -python -o ${MOD_NAME}_wrap.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}_wrap.cpp -o ${MOD_NAME}_wrap.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}_wrap.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<double> theV); > ~Wavelet(); > vector<double> GetDaub4Trans(); > > private: > vector<double> v; > > }; > > > #endif /*_WAVELET_H_*/ > -------------------------------------- > and Wavelet.cpp: > -------------------------------------- > #include "wavelet.h" > > Wavelet::Wavelet(vector<double> theV) > { > this->v = theV; > } > > Wavelet::~Wavelet() > { > // Nothing for now > } > > vector<double> Wavelet::GetDaub4Trans() > { > vector<double> retV = 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. > >>> import Wavelet > Traceback (most recent call last): > 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_Cpp/_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!
Can't help on SWIG - all I can say is that SIP which is used to wrap the large and template-ridden C++-GUI-Toolkit Qt worked flawlessly for me. Maybe you should try that. Diez -- http://mail.python.org/mailman/listinfo/python-list