2010-09-23 41 views
8

有沒有人有使用mingw64編譯Windows的64位Python擴展模塊的運氣?通過GCC的Win64 Python擴展

我已經成功編譯了這個平臺的VS2008的問題擴展。我還用mingw32編譯了它(使用32位python)。我寧願兩個版本都使用GCC。

我已經使用Cygwin安裝了mingw64-x86_64-w64 GCC 4.5.1工具集,並確信Python使用它們。但是,鏈接到python本身失敗。

所以我拿起pexports 0.44,用它來轉儲出python26.def文件並創建libpython26.a

現在,在this question中,我從Python獲得的唯一鏈接錯誤大約是__imp_py_InitModule4。瀏覽def文件,我看到一個Py_InitModule4_64符號。

任何想法?

+2

我建議你問問mingw-w64項目尋求幫助。他們通常非常敏感...... – 2010-10-01 08:02:21

回答

3

Python中有一種機制可以防止鏈接模塊與庫的錯誤版本。該Py_InitModule4功能(通過宏)更名爲Py_InitModule4_64當庫/模塊編譯爲64位架構(見modsupport.h):

#if SIZEOF_SIZE_T != SIZEOF_INT 
/* On a 64-bit system, rename the Py_InitModule4 so that 2.4 
    modules cannot get loaded into a 2.5 interpreter */ 
#define Py_InitModule4 Py_InitModule4_64 
#endif 

所以,如果你得到這個錯誤,這意味着你的Python庫,或者你的Python模塊被編譯爲32位體系結構,而另一個編譯爲64位體系結構。

4

我找到你需要定義MS_WIN64以及WIN32,也Distutils的包不理解mingw64,見this後,和this一個

修補的distutils支持mingw64是相當微不足道。