当我尝试使用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下使用快速版本?
答案 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
的输入类型。