如何配置 python cffi 库以使用 mingw?

Posted

技术标签:

【中文标题】如何配置 python cffi 库以使用 mingw?【英文标题】:How to configure python cffi library to use mingw? 【发布时间】:2013-05-23 03:56:58 【问题描述】:

尝试在 windows 上调用 cffi.FFI.verify() 会产生这个错误:

distutils.errors.DistutilsPlatformError: Unable to find vcvarsall.bat

我想用mingw来编译而不是msvc。我试图通过创建 c:\Python27\Lib\distutils\distutils.cfg 来让 distutils 使用 mingw

[build]
compiler = mingw32

但这似乎不影响 cffi,我仍然得到 vcvarsall.bat 丢失错误。

那么我怎样才能让 cffi 使用 gcc/mingw(或一般其他 C 编译器)?

【问题讨论】:

在命令提示符中返回 gcc --version 是什么? MinGW/bin 的路径是否在您的 PATH 环境中正确设置。变种。 ? 是的。我可以从我想运行 python 脚本的同一个 cmd 提示符调用 gcc (GCC) 4.7.2。 Windows 路径包含 MinGW/bin 目录 【参考方案1】:

尝试重新安装 cffi,现在 distutils 已正确配置。 例如使用easy_install

easy_install cffi

或者甚至使用 MinGW 从源代码重建和安装它:

cd cffi-src-dir
python setup.py config --compiler=mingw32 build --compiler=mingw32 install
cd ..

这将确保 cffi 正确设置以与 MinGW 一起使用...我猜...

【讨论】:

好吧,首先使用 pip 或 easy_install 失败,出现 distutils 错误,抱怨“-mno-cygwin”参数错误。在我从 distutils/cygwincompiler.py 中删除所述编译器参数后(根据这个问题bugs.python.org/issue12641),编译开始但在其他 gcc 错误中停止。我暂时放弃。 从源代码编译没有帮助,因为 setup.py 使用 distutils,因此您会遇到与 pip 或 easy_install 完全相同的问题。顺便说一句,最初我使用来自lfd.uci.edu/~gohlke/pythonlibs 的非官方二进制文件安装了 cffi。如果您只使用 ABI,它就可以工作,但是当尝试使用 API(并因此编译 C)时,它会失败,如我原来的问题中所述

以上是关于如何配置 python cffi 库以使用 mingw?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CFFI 将包含其标头的 C 库包装到 python 程序中?

如何使用 Python CFFI 正确包装 C 库

在 Python CFFI 中声明包含 time_t 字段的结构

使用带有嵌入式 PyPy 的外部“Python”样式 cffi 回调

Python cffi学习

使用 CFFI 在 Python 中创建 CData 类型的缓冲区