无法在windows下编译msgpack Python扩展

时间:2013-12-20 18:15:57

标签: python compilation msgpack python-extensions messagepack

当我尝试使用visual studio 2008专业版在windows下编译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下使用快速版本?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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的输入类型。