New submission from Jason Morgan <jas...@picochip.com>:

Bulding a simple extension (the spam example) fails with mingw64.

in modsupport.h, the following is used to detect 64bit, it does not work with 
mingw64.

#if SIZEOF_SIZE_T != SIZEOF_INT
/* On a 64-bit system, rename the Py_InitModule4 so that 2.4
   modules cannot get loaded into a 2.5 interpreter */
#define Py_InitModule4 Py_InitModule4_64
#endif

This code never compiles, you can test this by placing similar code and filling 
it with rubbish.

This means it thinks the extension is being built on a 32bit compiler and 
creates the wrong call for Py_InitModule.

Workaround:
Explicitly calling Py_InitModule4_64() in extension and declaring 
Py_InitModule4_64(...) in code. Note this does not complain about 
re-declaration and builds OK because declaration is wrong.
e.g.
//m=Py_InitModule("spam", SpamMethods);
m = Py_InitModule4_64("spam", SpamMethods,(char *)NULL, (PyObject *)NULL, 
PYTHON_API_VERSION);


Or, a better more portable permanent fix, define WIN64 in code and
modify modsupport.h:
#if SIZEOF_SIZE_T != SIZEOF_INT || defined(WIN64)
/* On a 64-bit system, rename the Py_InitModule4 so that 2.4
   modules cannot get loaded into a 2.5 interpreter */
#define Py_InitModule4 Py_InitModule4_64
#endif

I am sure there are other, more standard ways.

----------
components: Extension Modules
messages: 132595
nosy: moog
priority: normal
severity: normal
status: open
title: mingw64 does not link when building extensions
type: compile error
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue11722>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to