我想在各种环境中始终如一地使用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 =' - 静态'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
......所以......
我认为我需要告诉libevent构建.dll而不是.a,但libevent的Makefile实际上并没有.a目标,而且我不清楚所使用的抽象是如何改变才能实现的。
所以,退后一步:如何在cygwin下的python 2.7下安装gevent?