构建使用 C++11 功能的 Python 扩展时出现问题

Problems building a Python extension which uses C++11 features

我正在尝试在 windows 8.1 上构建一个 Python3.42 使用 C++11 功能的 64 位扩展模块。该模块在 linux 和使用 gcc 或 clang 的 MacOs 中正确构建。

在 windows 上,我安装了 visual studio 2010 express 和 windows sdk 7.1(以安装 VS2010 express 中显然缺少的 x64 编译器)。我已经能够构建扩展的一部分,但是一些 C++11 功能存在错误,这些功能在 VS2010 中不可用。我可以修改扩展代码以避免使用这些 C++11 功能,但我们有更多的 C++11 功能扩展,我是我团队中唯一使用 windows 的人……所以这不可行选项。我更愿意按原样构建它。

那么问题来了。如何使用具有更完整的 C++11 实现的 VS 编译器版本(例如 VS2012 或最好是 VS2013)在 windows 上构建 python 3 个扩展?

好吧,我会自己回答这个问题。

我想解决方案是使用 vs2012 或 vs2013 来构建扩展。在这种情况下,我需要用 vs2012 或 vs2013 重建 python 解释器。我找到了这个页面,它解释了如何:http://p-nand-q.com/python/building-python-33-with-vs2013.html 很高兴您可以从此页面下载 vs2013 构建的 python 二进制文件。但是,遵循这条路线意味着我必须使用 vs2013 构建我可能需要的每个非纯 python 扩展,这可能是一些,因为我主要是在研究而不是生产,而且我不知道什么扩展我可能需要。构建 numpy 和 scipy 并非易事,它们似乎需要 Fortran 编译器来构建它们。我想这是我想避免得出的结论,我希望有一些技巧来避免它。

最后我选择修改代码的 C++11 部分,以便它可以使用 vs2010 构建,这不是很好,但我想我会避免很多未来构建我可能需要的扩展的问题.我可以从这里下载 windows 二进制文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/

我想另一个解决方案是在 linux 或 MacOs 中开发。