さまざまな環境でPythonを一貫して使いたいと思っています。これらの環境の1つはcygwinです。私が使用したいコンポーネントの1つはgevent(http://www.gevent.org/intro.html)です。 cygwinの下では、私はpython 2.7を実行しています(ここに記述されている1行の変更をローカルに構築しました。これはビルドするためには、http://www.gossamer-threads.com/lists/python/python/976956です)。cygwinの下でpythonでgeventをビルドするにはどうすればいいですか?
geventにはlibevent(http://libevent.org/)が必要です。
libeventは(./configureを& &が& &は、make installを作る)cygwinの下にうまく構築するようです。
しかし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 =「 - 静的」geventをインストールPIP)、-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に.aの代わりに.dllをビルドする必要があると思うが、libeventのMakefileは実際に.aターゲットを持っていないので、これを達成するために使用されている抽象化がどのように変化しなければならないかはわかりません。
したがって、一歩前進:cygwinでpython 2.7の下にgeventをインストールするにはどうすればよいですか?
これは適切に構築されインストールされているようです。ありがとうございました! (このベータ版はどれくらい安定していますか?) – rdm
これほど遠くなく、安定しているよりも安定している点もあります。 –