web-dev-qa-db-ja.com

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

私はmingw(64ビット)を使用して、Win 7 64ビットでpython拡張機能をcythonでコンパイルしようとしています。
私はPython 2.6(アクティブ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.

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

114
joaquin

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

181

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


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の変更
2013の編集:python 2.7.6および3.3.3 -mno-cygwinが最後に削除され、ステップ3をスキップできるようになりました

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

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

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チュートリアルの指示に従って、テストhello.pyxファイルとsetup.pyファイルを作成します( http://docs.cython.org/src/quickstart/build.html
12)でコンパイル

python setup.py build_ext --inplace

できた!

11
joaquin

このバグは Python 2.7.6リリース候補1 で修正されました。

パッチのコミットは here です。

解決された課題追跡スレッドは here です。

9
Michael