Я хочу последовательно использовать python в различных средах. Одной из таких сред является cygwin. Одним из компонентов, которые я хочу использовать, является gevent (http://www.gevent.org/intro.html). Под cygwin у меня работает python 2.7 (создан локально, с описанным здесь изменением одной строки, которое требуется для его сборки: http://www.gossamer-threads.com/lists/python/python/976956).
gevent требует libevent (http://libevent.org/).
libevent, похоже, отлично работает под cygwin (./configure && make && make install).
Однако при сборке gevent (pip install gevent) происходит сбой, потому что libevent создает статические библиотеки (такие как /usr/local/lib/libevent.a), а сборке gevent требуются общие библиотеки. Таким образом:
gcc -shared -Wl,--enable-auto-image-base build/temp.cygwin-1.7.13-i686-2.7/gevent/core.o -L/usr/local/lib/python2.7/config -levent -lpython2.7 -o build/lib.cygwin-1.7.13-i686-2.7/gevent/core.dll
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -levent
Между тем, если я попытаюсь заставить gevent связать статически (CFLAGS='-static' pip install gevent), -levent по-прежнему не работает, наряду с многочисленными предупреждениями о том, как разыменование указателя с каламбуром типа нарушит правила строгого сглаживания и некоторые дополнительные сбои ld :
gevent/core.c:21835: предупреждение: разыменование указателя с каламбуром типа нарушит строгие правила псевдонимов
....
gevent/core.c:21836: warning: dereferencing type-punned pointer will break strict-aliasing rules
gcc -shared -Wl,--enable-auto-image-base -static build/temp.cygwin-1.7.13-i686-2.7/gevent/core.o -L/usr/local/lib/python2.7/config -levent -lpython2.7 -o build/lib.cygwin-1.7.13-i686-2.7/gevent/core.dll
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -levent
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -lpython2.7
... so...
Я думаю, что мне нужно сказать libevent собрать .dll вместо .a, но Makefile libevent на самом деле не имеет цели .a, и мне не ясно, как должны измениться используемые абстракции для достижения этого.
Итак, делаем шаг назад: как установить gevent под python 2.7 под cygwin?