2011-05-17 199 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

相關問題