[Pyrex] newbie problem with wrapping c++ code

Hoyt Koepke hoytak at gmail.com
Thu Apr 10 04:37:19 CEST 2008


Hello,

I'm a first-day newbie at pyrex, and I'm having some trouble wrapping
some cpp code. I've spent quite a while searching around the internet,
but I can't seem to discover what I'm doing wrong.

Here's my .pyx file:

++++++++++++++++++++++++++++
cdef extern from "ccode/test.h":
    void hello_world()

def helloWorld():
   hello_world()
++++++++++++++++++++++++++++

ccode/test.h is just:

++++++++++++++++++++++++++++
void hello_world();
++++++++++++++++++++++++++++


and ccode/test.cpp is:

++++++++++++++++++++++++++++
#include <iostream>
#include "test.h"

using namespace std;

void hello_world()
{
 cout << "hello, world." << endl;
}
++++++++++++++++++++++++++++

I'm using the numpy.distutils package to try to compile the code (I
need numpy.distutils for the rest of the project):

++++++++++++++++++++++++++++
#!/usr/bin/env python

from os.path import join, split

cdir = 'ccode'

def configuration(parent_package='',top_path=None):
   from numpy.distutils.misc_util import Configuration, get_mathlibs
   config = Configuration('',parent_package,top_path)

   config.add_extension('test',
                        sources=[join(cdir, 'test.cpp'), 'test.pyx'],
                        depends=[join(cdir, 'test.h'), 'test.pyx'],
                        language="c++"
                        )
   return config

if __name__ == '__main__':
   from numpy.distutils.core import setup
   setup(configuration=configuration)
++++++++++++++++++++++++++++

Anyway, the error I'm getting when I try to import the new module is:

>>> import test
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ImportError: ./test.so: undefined symbol: hello_world

What am I doing wrong?  I'm sure it's something very simple...

Thanks!
--Hoyt

-- 
+++++++++++++++++++++++++++++++++++
Hoyt Koepke
UBC Department of Computer Science
http://www.cs.ubc.ca/~hoytak/
hoytak at gmail.com
+++++++++++++++++++++++++++++++++++



More information about the Pyrex mailing list