On Nov 16, 8:56 pm, Charlie <[EMAIL PROTECTED]> wrote: > > > But when I try to import test in python, it complains: > > > import _test > > > ImportError: ./_test.so undefined symbol: _Z9binary_opiiPFiiiE > > > The above is a mangled name so you've got some C vs C++ problems I'd > > say. > > > You could try putting some extern "C" {} in around all the functions > > which are imported and exported. Have a look at the code SWIG > > generates and see if it puts some extern "C" in and match what it > > does in your code. > > > We used to use SWIG in for python embedding in our C++ project, but we > > found that using ctypes is a lot easier. You just write C .so/.dll > > and use ctypes to access them. You can do callbacks and embedding > > python like this too. > > Thanks Nick. > > I tried your method, if I am right(please see the attached details), > and I still got the undefined symbol error like previous. The only > difference is "_Z9binary_opiiPFiiiE" changed to "binary_op". Could you > help me more on this. It seems to have a mixed problems here and I > guess what you've pointed out is one of them. But really, what I do > now is just try to reproduce the example, how can this fails? What my > ultimate need is wrapping up a template function taking template > function pointer as argument. Did you ever try that? Many thanks > already anyway. > ------error message---------- > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "test.py", line 7, in <module> > import _test > ImportError: ./_test.so: undefined symbol: binary_op > ----------------------------------
Hi Charlie, I think you're overcomplicating. Here's what I think what you want: (Unproduced.) >>> binary_op( 3, 4, myadd ) 7 >>> binary_op( 3, 4, mysub ) -1 >>> binary_op( 3, 4, mymul ) 12 Correct? -- http://mail.python.org/mailman/listinfo/python-list