为什么在Windows上需要使用MSVC编译Python扩展模块?

时间:2019-05-19 17:40:45

标签: python c windows visual-c++ mingw-w64

我多次看到它提到Windows上的Python扩展模块必须使用MSVC构建。这里也提到了:

https://docs.python.org/3/extending/windows.html

  

Windows Python是用Microsoft Visual C ++构建的;使用其他编译器可能会或可能不会(尽管Borland似乎)。本节的其余部分特定于MSVC ++。

我希望对为什么有必要获得技术上的了解。使用MinGW-w64时,哪些特定的问题可能会出错?在什么情况下会出错?模块是用C还是C ++编写是否重要?我正在寻找进一步研究的起点,高层次的概述或最好的参考:

请注意,我对Windows上的开发不是很熟悉。


我提出这个问题的动机是,当事情出现 时,通过与MinGW进行编译来了解人们承担的风险有多大。使用MSVC编译某些依赖项可能特别麻烦,但是使用MSYS / MinGW则很容易。

1 个答案:

答案 0 :(得分:2)

原因是Microsoft Visual Studio的每个发行版都有其自己的运行时MSVCRTxx.DLL,没有像Linux那样的系统级C库。由于较新的MSVCRT不能自由重新分发,因此MinGW无法使用它。相反,MinGW依赖于甚至不支持大多数C99功能的旧MSVCRT.DLL。

一个人不能兼容地链接用不同版本的MSVC ++编译的代码(使用不同的运行时),因此不可避免的是,大多数与MSVC6.0兼容的MinGW生成的代码无法与使用C / C ++编译器编译的Python链接在一起。 VS 2015或2017。

More information here