用VC2010编译Python扩展

Posted

技术标签:

【中文标题】用VC2010编译Python扩展【英文标题】:Compiling Python extensions with VC2010 【发布时间】:2011-06-08 10:36:59 【问题描述】:

我有一些用 C++0x 编写的代码,我想将它们作为扩展暴露给 Python 2.7。

由于它使用了几个 C++0x 特性,我不想在 C++03 中重写它,所以我不得不使用 VC2010。但是默认的 Python 2.7 安装是用 VC2008 编译的。

我发现this post 解释了如何强制 distutils 使用 VC2010,但评论者指出这将导致 msvcr90.dll(由解释器链接)和 msvcr100.dll(由扩展名链接)之间的 DLL 冲突)。

有没有办法在VC2010中编译扩展而无需重新编译Python?

(我最近才开始在 Windows 上编程,所以我对动态链接在那里的工作原理没有确切的了解)

【问题讨论】:

【参考方案1】:

不,没有。

就像您已经知道的那样,当您使用 VS2010 工具集编译某些东西时,它会链接到 msvcr100.dll。由于 Python 与 msvcr90.dll 链接,因此在同一个应用程序中混合它们时,您会得到令人不快的惊喜。

你现在最好的选择可能是停止使用任何 C++0x 功能并使用 VS2008 或 mingw 编译你的扩展。

如果这是你不打算分发的东西并且它只是为了玩,使用 VS2010 编译 Python 是唯一的选择。

【讨论】:

以上是关于用VC2010编译Python扩展的主要内容,如果未能解决你的问题,请参考以下文章

用VC2010以上版本编译可以在低版本XP和2003的运行程序的方法

在VS2010的VC++中如何编译、链接、运行、调试程序

opencv 安装 vc14可以在vs10上运行吗

为啥VC++ 2010编译器在编译简单代码时会崩溃?

vc++6.0不能编译

nmake / VC++ 2010:编译时不依赖 MSVCR100.dll