为什么GCC编译的Python库跨编译器版本兼容,而MSVC不兼容?

问题描述

我正在Linux和Windows上将一些Python程序包(来自pip)添加到第三方应用程序的Python解释器中。在其应用程序的Linux版本中,他们根据GCC 4.xx编译了Python,而在Windows版本中,他们根据MSC 1900对其进行了编译。

在Windows上,我必须构建具有.pyd文件且具有相同MSVC版本的每个Python软件包,否则在尝试将其导入Python时会出现运行时错误。在Linux上,我能够在4.xx构建的解释器中导入使用任何GCC版本构建的Python库。

有人可以解释它是如何工作的,或者为什么使用不同MSVC版本构建的二进制文件不能一起工作?

解决方法

2015年之前的每个Visual Studio版本都有其自己的C运行时版本,必须单独安装。在Visual Studio 2015中,Universal CRT has been introduced现在是Windows 10的一部分。

尽管如此,这并不意味着使用不同运行时的库是不兼容的。您得到的错误可能是由于您根本没有在系统上安装相应的运行时版本引起的。除了该they should work just fine(某些special cases除外)。