我想在各種環境中一致地使用python。其中一種環境是cygwin。我想要使用的一個組件是gevent(http://www.gevent.org/intro.html)。在cygwin下,我有python 2.7正在運行(本地構建,這裏描述了一行更改,它需要構建:http://www.gossamer-threads.com/lists/python/python/976956)。如何在cygwin下的python中構建gevent?
gevent需要libevent(http://libevent.org/)。
的libevent似乎建立在cygwin下就好了時(./configure & &使& &使安裝)。
但是,當構建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安裝GEVENT),-levent仍然失敗,有關提領類型,punned指針將如何打破多次警告沿嚴格走樣規則和一些額外的LD故障:
GEVENT/core.c:21835:警告:提領型punned指針將打破嚴格走樣規則
....
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?
這似乎已經建立和正確安裝。謝謝! (此穩定版有多遠?) – rdm 2012-04-09 20:31:19
不是那麼遠,在某些方面比「穩定」更穩定。 – 2012-04-09 22:48:44