Windows下基于Cygwin构建Python3.4外部库时绕过gcc的-mcygwin参数
解决Cygwin GCC
-mcygwin 参数弃用问题(无需修改代码) 你遇到的问题是新版Cygwin GCC已经移除了-mcygwin选项,但Python 3.4的distutils在指定--compiler=cygwin时仍会默认添加这个参数。由于你无法修改代码库,以下两种命令行方式可以直接解决这个问题:
方法一:通过环境变量覆盖编译参数
这是最简洁的方案,利用CFLAGS环境变量替换distutils默认生成的编译参数,直接去掉-mcygwin:
在命令提示符中执行:
set CFLAGS=-mdll -O -Wall -Inauty -Isrc -IC:\Python34\include -IC:\Python34\include -O4 -fPIC && python setup.py build --compiler=cygwin
原理说明:
distutils调用gcc时会优先读取环境变量CFLAGS中的参数,而非默认生成的包含-mcygwin的参数列表。我们把原命令中除-mcygwin之外的所有必要参数都放入CFLAGS,这样gcc就会用这些参数执行编译,不会再添加已弃用的-mcygwin。
方法二:通过--global-option直接指定编译命令
如果环境变量方式不生效,你可以直接通过--global-option传递完整编译命令给build_ext环节:
python setup.py build --compiler=cygwin --global-option="build_ext" --global-option="-c" --global-option="gcc -mdll -O -Wall -Inauty -Isrc -IC:\Python34\include -IC:\Python34\include -c src/nautywrap.c -o build\temp.win-amd64-3.4\Release\src\nautywrap.o -O4 -fPIC"
原理说明:
这个命令直接绕过distutils默认的参数生成逻辑,强制指定编译时使用的gcc命令,完全避开-mcygwin参数。
注意:第一种方法更推荐,它不需要手动复制完整的编译路径和目标文件,后续如果setup.py有其他编译单元,也能自动应用正确的参数。
内容的提问来源于stack exchange,提问作者ysig
相关产品推荐
相关产品推荐

