2013-12-20 49 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