0

当我尝试在 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 下使用快速版本?

4

2 回答 2

0

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

我通常尽可能使用Christoph Gohlke 提供的预编译二进制文件。他似乎有一个msgpack 的构建

于 2013-12-20T18:41:26.097 回答
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两个标题中的类型定义。

于 2013-12-20T18:42:53.020 回答