Re: newbie problem with wrapping c++ code

Sven Berkvens-Matthijsse <[email protected]>
Newsgroups gmane.comp.python.pyrex
Message-ID <[email protected]>
> Hello,

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;
> }
> ++++++++++++++++++++++++++++

Your hello_world() function is a C++ function, and that cannot be
called from C programs. You need to define it like this:

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

> 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

Correct, because the C++ symbol is called something like
"_11hello_world4void" (probably not this exactly, but something like
it) instead of "hello_world".

> What am I doing wrong?  I'm sure it's something very simple...
> 
> Thanks!
> --Hoyt

-- 
With kind regards,
Sven Berkvens-Matthijsse
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.