根据Python documentation,在Windows上编译Python扩展时,"您应该使用与用于构建Python本身的相同版本的VC ++"。通常给出的解释是VC运行时版本中的不匹配将导致问题。但是,可以使用看起来工作得很好的较新的Visual Studio版本来编译扩展。
不同运行时会导致问题的情况是什么?我在这个主题上看到的最多信息是python-dev邮件列表中的this thread。是否有一组(希望很小的)用例导致有问题的行为,或者只是运气问题我还没有遇到任何麻烦?
答案 0 :(得分:1)
该邮件线程是我见过的最全面的列表,其中不匹配的C运行时会导致问题。一般问题是每个运行时不与其他运行时共享任何内容,每个运行时都有自己独立的状态,并且它们在外部公开的任何内容都不能由您自己的代码在运行时之间共享。前一个问题意味着每个运行时都有自己的errno
,第二个意味着您不能使用一个运行时打开的FILE *'
个对象和另一个运行时的文件I / O函数。 / p>
枚举所有可能的问题意味着枚举运行时的整个可见状态(包括间接可见状态),然后枚举它们可以生成和接收的每个可能不兼容的值。
稍微抵消了这一点,Microsoft's promise使用一个版本的Microsoft C / C ++编译器编译的目标文件(.OBJ)应与编译器的后续版本兼容。这意味着,例如,两个不同的运行时不会使用errno
的完全不同的值集(例如,ENOENT
总是2),因为这些值将在目标文件中显示为常量。 / p>