Не могу скомпилировать расширение msgpack Python под Windows

Когда я пытаюсь скомпилировать MSGPACK под Windows с профессиональной версией Visual Studio 2008, выполнив

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'

Основываясь на поиске в Google, похоже, что какой-то другой заголовочный файл где-то определяет int8_t. На самом деле, если я не ошибаюсь, ошибка говорит о том, что это stdint.h, это файл заголовка, который я добавил из msinttypes, чтобы решить проблему в первую очередь. На этой машине также установлена ​​профессиональная версия vs.net 2010, но я не уверен, что это может вызвать проблемы.

Учитывая тот факт, что у меня есть полная установка Python, работающая под Windows на этом компьютере, я не могу переключиться на mingw под Windows, потому что это, вероятно, вызовет проблемы, так как весь код Python 2.7 скомпилирован с Visual C++ 2008.

Как мне скомпилировать расширение msgpack, чтобы я использовал быструю версию под windows?

2 ответа

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 Тип определен в обоих заголовках.

Компиляция библиотек Python в Windows действительно может быть проблемой.

Я обычно использую предварительно скомпилированные двоичные файлы, предоставленные Кристофом Гольке, когда это возможно. У него, похоже, есть сборка msgpack.

Другие вопросы по тегам