2011-05-17 62 views
110

我试图在win 7 64位使用mingw(64位)编译一个带有cython的python扩展。
我与Python 2.6(活动的Python 2.6.6),并用足够的distutils.cfg文件(设置MinGW的,因为编译器)编译与cython和mingw产生gcc:错误:无法识别的命令行选项'-mno-cygwin'

当执行工作

> 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. 

我该如何解决它?

+0

这里是[链接](https://stackoverflow.com/a/43971456/4628439)!这解决了最新的Cython和MingW – 2017-06-22 10:04:03

回答

178

这听起来像GCC 4.7.0终于删除了弃用的-mno-cygwin选项,但distutils还没有赶上它。安装MinGW的稍旧版本,或在您的Python目录中编辑distutils\cygwinccompiler.py以删除-mno-cygwin的所有实例。

+10

感谢Ignacio的问题。我已经自己尝试了这个解决方案(以消除cygwinccompyler中的-mno-cygwin)。该错误消失,但后来我得到了与ld不同的错误。但这是一个不同的问题。我明天会发布。现在需要休息一下......为什么在Windows中编译这么困难? – joaquin 2011-05-17 20:54:58

+9

我们正在研究distutils的补丁:http://bugs.python.org/issue12641 – 2011-10-07 17:16:00

+7

这是为我工作的。我按照伊格纳西奥的指示逐字。在cygwincompile.py文件中用“”代替了字符串“-mno-cygwin”的4个实例 – 2012-10-27 20:20:53

11

在解决这些问题的过程中,我发现我在this thread中写了一个配方。我在这里重现它的情况下,它可能是公用的为他人:


一步配方步骤编译64位用Cython扩展与Python 2.6.6 在Win 7的MinGW的编译器的64位

安装mingw的编译器
1)安装tdm64-GCC-4.5.2.exe为64位编译

将贴剂贴于python.h
2)用C修改python.h:\ python26 \包括如 http://bugs.python.org/file12411/mingw-w64.patch

修改指示的distutils
编辑2013:注意,除了在python 2.7.6和3.3.3 -mno-cygwin的一直最后删除,所以第3步可以跳过

3)消除-mno-cygwin的FOM调用在Python26 \ lib中 Mingw32CCompiler类的gcc的所有参数\的distutils \ cygwinccompiler.py
4)在同一个模块中,修改get_msvcr()返回一个当msc_ver =='1500'时,空列表 而不是['msvcr90']。

产生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:\用户\ 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:\ P ython26 \库

生产的.pyd扩展
11)创建一个测试hello.pyx文件和setup.py文件中 用Cython教程显示(http://docs.cython.org/src/quickstart/build.html
12)编译

python setup.py build_ext --inplace

完成!

+0

我在win64 python27上做了第1步。然后我尝试和cython安装成功。 我不知道如何处理第2步中的补丁。 – craastad 2013-03-04 11:13:05

+0

@Chris Raastad。有趣。但这不是关于cython安装,而是cython编译脚本。不确定你的意思。无论如何,两天前,robintw发表了有关ld错误的评论。所以,如果你真的有mingw的工作,也许这取决于你安装的版本,也许你已经安装的库,你第一枪或通过错误卡住。 – joaquin 2013-03-04 23:43:49

+1

+1这是一个有用的答案。对于使用numpy的扩展,我还必须在'numpy/distutils'文件夹中破解'mingw32compiler.py'的选项。 – 2013-10-27 22:14:47

相关问题