It seems to be a problem with distutils currently that g++ isn't used to
link at the appropriate time. Ideally you'd split linking into C++ and C
variations, and detect whether the C++ compiler was used and use the
C++ linker if it was.
And, a bug related to this, is that you can't easily override the linker
when using mingw; the customize_compiler() function checks for a type of
def customize_compiler(compiler): """Do any platform-specific customization of a CCompiler instance.
Mainly needed on Unix, so we can plug in the information that varies across Unices and is stored in Python's Makefile. """ if compiler.compiler_type == "unix":
But the mingw compiler (which is unix compatible) has a compiler_type
'mingw32', not 'unix'.
The easiest "band-aid" patch would be to use
if compiler.compiler_type in ("unix", "mingw32"):
but I wonder whether:
if isinstance(compiler, UnixCCompiler):
would be more appropriate?
The workaround I came up with is:
# Force g++ for linking
import distutils.sysconfig old_customize_compiler = distutils.sysconfig.customize_compiler def customize_compiler(compiler): old_customize_compiler(compiler) if compiler.compiler_type == 'mingw': compiler.set_executables(linker_so='g++ -mno-cygwin -shared') distutils.sysconfig.customize_compiler = customize_compiler