Ошибка при попытке кросс-компиляции расширения 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
У кого-нибудь есть идеи, как справиться с этой задачей?