Error beim Versuch, die SWIG-Python-Erweiterung für mingw32 mit distutils zu kompilieren

Ich versuche, eine einfache SWIG Python-Erweiterung unter Linux für Windows (mingw32) mithilfe des distutils-Moduls zu kompilieren.

Das ultimative Ziel ist es, einen Python-Wrapper für eine Bibliothek zu kompilieren und ihn unter Windows zu verwenden. Offensichtlich habe ich mit dem grundlegendsten Beispiel angefangen und es schlägt leider fehl.

Hier sind die Dateien, die ich verwende:

example.c

/* File : example.c */

/* A global variable */
double Foo = 3.0;

/* Compute the greatest common divisor of positive integers */
int gcd(int x, int y) {
  int g;
  g = y;
  while (x > 0) {
    g = x;
    x = y % x;
    y = g;
  }
  return g;
}

example.i - SWIG-Schnittstellendatei

/* File : example.i */
%module example

%inline %{
extern int    gcd(int x, int y);
extern double Foo;
%}

setup.py

# setup.py
import distutils
from distutils.core import setup, Extension

setup(name = "SWIG example",
      version = "1.0",
      ext_modules = [Extension("_example", ["example.i","example.c"])])

Um mit dem nativen (Linux) gcc-Compiler zu kompilieren, rufe ich auf:

python setup.py build

Alles funktioniert wie ein Zauber! Leider beim Versuch, das Windows-Ziel anzugeben:

python setup.py build --compiler=mingw32

Ich erhalte die Fehlermeldung, dass gcc den Schalter -mdll nicht erkennen kann:

running build
running build_ext
building '_example' extension
swigging example.i to example_wrap.c
swig -python -o example_wrap.c example.i
creating build
creating build/temp.linux-x86_64-2.7
gcc -mdll -O -Wall -I/home/jojek/anaconda/include/python2.7 -c example_wrap.c -o build/temp.linux-x86_64-2.7/example_wrap.o
gcc: error: unrecognized command line option ‘-mdll’
error: command 'gcc' failed with exit status 1

Fair genug, es macht vollkommen Sinn, da die Toolchain nicht gültig ist. Ich habe dafür gesorgt, dassmingw32 ist auf meinem Computer installiert. Durch einen Anruf beidpkg -L mingw32 Ich weiß, dass sich der Compiler in @ befinde/usr/bin/i586-mingw32msvc-gcc.

Mein nächster Schritt bestand darin, die CC-Umgebungsvariable mit dem tatsächlichen Pfad zu meinem Compiler zu überschreiben. Wenn ich versuche, es erneut zu kompilieren, erhalte ich die folgende Fehlermeldung mit fehlendemsys/select.h Header-Datei

running build
running build_ext
building '_example' extension
swigging example.i to example_wrap.c
swig -python -o example_wrap.c example.i
creating build
creating build/temp.linux-x86_64-2.7
/usr/bin/i586-mingw32msvc-gcc -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/jojek/anaconda/include/python2.7 -c example_wrap.c -o build/temp.linux-x86_64-2.7/example_wrap.o
example_wrap.c:1: warning: -fPIC ignored for target (all code is position independent)
In file included from /home/jojek/anaconda/include/python2.7/Python.h:58,
                 from example_wrap.c:125:
/home/jojek/anaconda/include/python2.7/pyport.h:351:24: error: sys/select.h: No such file or directory
error: command '/usr/bin/i586-mingw32msvc-gcc' failed with exit status 1

Hat jemand eine Idee, wie man diese Aufgabe verwaltet?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage