building foo.pyd, _initfoo vs. initfoo

D

Daniel Franke

Hi all.

Usually I work on Linux and all my cmake-built Python extensions working there
without trouble. Now these things need to work on Windows as well. While the
code itself compiles fine, linking and loading makes trouble.

First of, to successfully link everything with mingw (g++-4.4.0, somewhat
oldish) I had to define:

-DPy_ENABLE_SHARED -DPy_BUILD_CORE

Not sure if this makes sense, but if it works, fine by me. Now, loading the
module is different.

First attempts of loading the module failed miserably until I found out that
Python expects files with a .pyd suffix. Very innovative to throw off the
layman. Took that hurdle.

Finally, on load of foo.pyd, I get:

"Import Error: dynamic module does not define init function (initfoo)"

As this module loads fine in Linux, there is an initfoo() defined. Checking
with `nm`, I find two things:

1. The function name is mangled (__Z12initfoov)
-> the module is compiled with g++, but I believed that PyMODINIT_FUNC
includes the 'extern "C"' apparatus?

2. Manually enclosing the init function with 'extern "C" {}" still yields the
same error
-> the function name also comes with a leading underscore '_', i.e.
"_initfoo", not "initfoo"

Could someone knowledge with Windows and MinGW help me to sort this out? Tools
used: cmake-2.8.3, mingw-? with gcc-4.4 and Python-2.7.2 from python.org.

Thanks

Daniel
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top