【问题标题】:Can't compile msgpack Python extension under windowswindows下无法编译msgpack Python扩展
【发布时间】:2013-12-20 18:15:57
【问题描述】:

当我尝试在windows下用visual studio 2008专业版编译msgpack 通过做

Python setup.py build

我明白了

msgpack/_packer.cpp(316) : fatal error C1083: Cannot open include file: 'stdint.
h': No such file or directory

显然这是由于 MS 编译器没有适当的 C 支持,所以我下载了最新的 msinttypes,它应该可以解决这个问题。如果我将 inttypes.h 和 stdint.h 放在C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include 下并尝试再次编译,我会得到:

c:\work\tools\msgpack-python-0.4.0\msgpack-python-0.4.0\msgpack\sysdep.h(24) : e
rror C2371: 'int8_t' : redefinition; different basic types
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\stdint.h(87) : see
 declaration of 'int8_t'

根据谷歌搜索,这看起来像是某个地方的其他头文件正在定义 int8_t。实际上,如果我没记错的话,错误说它是 stdint.h,这是我从 msinttypes 添加的头文件,用于首先解决问题。这台机器还安装了 vs.net 2010 专业版,但我不确定这是否会导致任何问题。

考虑到我在这台机器下的 windows 下运行了完整的 Python 设置,我无法在 Windows 下切换到 mingw,因为这可能会导致问题,因为所有 Python 2.7 代码都是用 Visual c++ 2008 编译的。

如何编译msgpack扩展,以便在windows下使用fast版本?

【问题讨论】:

    标签: python compilation msgpack python-extensions messagepack


    【解决方案1】:

    在 Windows 上编译 Python 库确实很痛苦。

    我通常尽可能使用预编译的二进制文件provided by Christoph Gohlke。他似乎有一个build of msgpack

    【讨论】:

    • 他确实有,但我希望能够自己编译它们。我一直在使用他的二进制文件,但现在是我学习如何在 Windows 上执行此操作的时候了。这就是问题所在。
    【解决方案2】:

    Python 依赖于 C ABI,我认为您可以将它与 MinGW 一起使用而不会出现问题。

    我不知道为什么两个标题都定义了int8_t,但还有一些更有趣的东西。在 Visual Studio 2008 中,_MSC_VER 应该等于 1500,因此 sysdep.h 将其定义为 __int8。但是来自 msinttypes 的stdint.h 也应该这样做:

    #if (_MSC_VER < 1300)
       typedef signed char       int8_t;
       ...
    #else
       typedef signed __int8     int8_t;
    

    尝试检查 int8_t 在两个标题中的类型定义。

    【讨论】:

    • 啊,有趣的一点,我会问一个关于这个的具体问题。如果保证没有问题,可能是一个很好的解决方法。
    • 更新:这里是问题:stackoverflow.com/questions/20710532/… 我也会根据你的建议检查标题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2017-03-21
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2012-01-26
    • 2011-06-08
    相关资源
    最近更新 更多