2013-12-20 46 views
0

下msgpack Python扩展当我尝试做不能编译窗口

Python setup.py build 

我得到

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

编译msgpack Windows下使用Visual Studio 2008专业版 显然,这是由于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

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

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

+0

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

+0

祝你好运:-)。 – Chris

0

Python依赖C ABI,我想你可以与MinGW使用它没有问题。

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

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

尝试检查什么int8_t在两个头通过typedef来。

+0

啊,有趣的一点,我会问一个关于这个问题的具体问题。如果保证无故障,可能是一个很好的解决方法。 – mahonya

+0

更新:这里是问题:http://stackoverflow.com/questions/20710532/can-i-use-mingw-compiled-python-extensions-together-with-visual-c-compiled-one我会检查标题根据你的建议也 – mahonya