Ошибка при попытке кросс-компиляции расширения SWIG Python для mingw32 с использованием distutils

Я пытаюсь кросс-компилировать простое расширение SWIG Python для Linux для Windows (mingw32), используя модуль distutils.

Конечная цель состоит в том, чтобы скомпилировать оболочку Python для некоторой библиотеки и иметь возможность использовать ее в Windows. Очевидно, я начал с самого простого примера, и, к сожалению, это не удалось.

Вот файлы, которые я использую:

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 интерфейсный файл

/* 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"])])

Чтобы скомпилировать с использованием нативного (Linux) компилятора gcc, я вызываю:

python setup.py build

Все работает как шарм! К сожалению, при попытке указать цель Windows:

python setup.py build --compiler=mingw32

Я получаю сообщение о том, что gcc не может распознать ключ -mdll:

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

Справедливо, это имеет смысл, так как набор инструментов недействителен. Я убедился, чтоmingw32 установлен на моей машине. По телефонуdpkg -L mingw32 Я знаю, что компилятор находится в/usr/bin/i586-mingw32msvc-gcc.

Следующим моим шагом было переопределить переменную среды CC фактическим путем к моему компилятору. Когда я пытаюсь скомпилировать его снова, я получаю следующую ошибку с отсутствующимsys/select.h заголовочный файл:

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

У кого-нибудь есть идеи, как справиться с этой задачей?

Ответы на вопрос(1)

Ваш ответ на вопрос