cythonとmingwでコンパイルするとgccが生成される:エラー:認識されないコマンドラインオプション '-mno-cygwin'


114

私はmingw(64ビット)を使用して、Windows 7 64ビットのcythonでpython拡張機能をコンパイルしようとしています。
私はPython 2.6(Active Python 2.6.6)と適切なdistutils.cfgファイル(mingwをコンパイラーとして設定)で作業しています

実行時

> C:\Python26\programas\Cython>python setup.py build_ext --inplace

gccに-mno-cygwinオプションがないというエラーが表示されます。

> C:\Python26\programas\Cython>python setup.py build_ext --inplace
running build_ext
skipping 'hello2.c' Cython extension (up-to-date)
building 'hello2' extension
C:\mingw\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python26\include -IC:\Python26\PC -c hello2.c -o build\temp.win-amd64-2.6\Release\hello2.o
gcc: error: unrecognized command line option '-mno-cygwin'
error: command 'gcc' failed with exit status 1

gccは:

C:\>gcc --version
gcc (GCC) 4.7.0 20110430 (experimental)
Copyright (C) 2011 Free Software Foundation, Inc.

どうすれば修正できますか?


ここにリンクがあります!最新のCythonと
MingW

回答:


181

GCC 4.7.0がようやく廃止予定の-mno-cygwinオプションを削除したようですが、distutilsはまだそれに追いついていません。少し古いバージョンのMinGWをインストールするかdistutils\cygwinccompiler.py、Pythonディレクトリで編集してのすべてのインスタンスを削除します-mno-cygwin


10
イグナシオ、ありがとう。私はすでに自分でこの解決策を試しました(cygwinccompylerから-mno-cygwinを排除するため)。エラーは消えましたが、ldで別のエラーが発生しました。しかし、これは別の質問です。明日投稿します。ここで少し休憩が必要です...なぜウィンドウでコンパイルするのがとても難しいのですか?
ホアキン、

7
これは私のために働いたものです。私はイグナシオの指示に忠実に従いました。cygwincompile.pyファイルで文字列「-mno-cygwin」の4つのインスタンスを「」に置き換えました
Ram Narasimhan

4
@joaquin:ld取得したエラーをなんとか整理できましたか?私は同じエラーに遭遇し、それを分類するのに苦労しています。
robintw 2013年

@robintwはい、私はやった。その瞬間にレシピを投稿しました(そして見つけました!)。編集を参照してください
joaquin 2013

2
Python 2.7.9はこの問題を解決しました。Python 2.7.8にはまだあります。
fx-kirin 2015年

11

私が見つけたこれらの問題と次の問題を解決する過程で、私はこのスレッドでレシピを書きました。他の人に役立つ可能性がある場合に備えて、ここで再現します。


Win 7 64ビットでmingwコンパイラーを使用してPython 2.6.6で64ビットCython拡張機能をコンパイルするためのステップバイステップのレシピ

mingwコンパイラをインストールする
1)64ビットコンパイル用にtdm64-gcc-4.5.2.exeをインストールする

python.hにパッチを適用する
2)C:\ python26 \ includeにあるpython.hを次のように変更します http://bugs.python.org/file12411/mingw-w64.patchに

distutilsを変更する
Edit 2013の:python 2.7.6および3.3.3よりも注意してください-mno-cygwinが最終的に削除されたため、ステップ3をスキップできます

3)Python26 \ Lib \ distutils \ cygwinccompiler.pyのMingw32CCompilerクラスでgccの呼び出しからすべてのパラメーター-mno-cygwinを削除します
4)同じモジュールで、get'msvcr()を変更して、['msvcr90 '] msc_ver ==' 1500 'の場合。

libpython26.aファイルを生成します(64ビットpythonには含まれていません)
2013を編集します。次の手順5〜10は、gohlkeからlibpython26.aをダウンロードしてインストールすることでスキップできます

5)mingw-w64-bin_x86_64- mingw_20101003_sezero.zipからgendef.exeを取得します(gendef.exeはtmd64ディストリビューションでは使用できません。別の解決策は、ソースからgendefをコンパイルすることです...)
6)python26.dllをコピーします(Cにあります) \ windows \ system32)をユーザーディレクトリ(C:\ Users \ myname)に
に追加します。7)python26.defファイルを次のように作成します。

gendef.exe C:\ Users \ myname \ python26.dll

8)生成されたpython.defファイル(gendefが実行されたフォルダーにある)をユーザーディレクトリに移動します。
。9)libpython.aを次のように生成します。

dlltool -v --dllname python26.dll --def C:\ Users \ myname \ python26.def --output-lib C:\ Users \ myname \ libpython26.a

10)作成したlibpython26.aをC:\ Python26 \ libsに移動します

.pyd拡張子を
作成する11)cythonチュートリアル(http://docs.cython.org/src/quickstart/build.html)に示されているように、テストhello.pyxファイルとsetup.pyファイルを作成します。12
)コンパイル

python setup.py build_ext --inplace

できた!


win64 python27でステップ1を実行しました。次に、試してみましたが、cythonは正常にインストールされました。ステップ2のパッチをどうすればいいのかわからなかった
craastad

@クリス・ラスタッド。面白い。しかし、これはcythonのインストールではなく、cythonがスクリプトをコンパイルすることについてです。あなたがそれを意味していたかどうかわかりません。とにかく、2日前にldエラーについてrobintwからコメントがありました。したがって、実際にmingwが機能している場合、インストールするバージョンと、インストール済みのライブラリによって、最初のショットで失敗したり、エラーが発生したりすることがあります。
joaquin 2013年

1
+1これは便利な答えです。numpyを使用する拡張機能については、numpy/distutilsフォルダー内のオプションもハックする必要がありましたmingw32compiler.py
Caleb Hattingh 2013年

python27では、cygwinccompiler.pyファイルにMS_WIN64を追加して定義する必要があるようです。こちらをご覧ください:stackoverflow.com/a/19867426/2136991
David

OPをリンクする質問の@Davidは、python27ではなくpython26を参照しています。あなたは私のレシピに正確に従いましたが、それでもあなたが参照する変更を行う必要がありましたか?
joaquin 2013年


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.