2011-09-20 88 views
5

我想在一個使用cygwin的64位Win7機器上構建一個python擴展DLL(因爲cygwin只能作爲32位進程運行,實際上是交叉編譯)。建立64位libpython27.a使用cygwin,dlltool

我使用dlltool(作爲解釋,例如,here)libpython27.a自己創造了從python27.dll,但在連接階段構建失敗說
skipping incompatible c:\Python27\libs/libpython27.a when searching for -lpython27
這正是錯誤報告here(其中傢伙最終轉移到MSVC編譯器...)。

更多信息:
- 活躍的Python 2.7.2,Win64的,64
- cygwin的最新版本,使用/usr/bin/x86_64-w64-mingw32-g++.exe編譯

不任何人都知道這是否被支持?
有沒有辦法使用我在這裏錯過的dlltool?

(我沒發現here指導使用
dlltool --as-flags=--64 -m i386:x86-64 -k -l libpython27.a -d python.def
但這樣做的時候,我從dlltool "invalid bfd target"錯誤)

謝謝!

更新:我相信可以這樣做,因爲Enthought python包含這樣的文件。我想創建一個不包含它的更常見發行版。

+0

那麼如果我們知道這個標誌,它現在不會是_secret_了嗎? – brc

回答

0

我不知道你有多大幫助找到這一點,但在頁面的底部,你掛有到here一個鏈接 - 它說:

不要使用的MinGW-W64。您會注意到,Python的 Python的MinGW導入庫(例如libpython27.a)從Python的的AMD64版本中省略。這是故意的。 不要試圖用dlltool製作一個。 目前還沒有官方的MinGW-w64版本,它仍處於「測試版」,並且認爲它不穩定,儘管您可以從例如64位版本中獲得64位版本。 TDM-GCC。 mingw運行時 也存在與MSVC運行時衝突的問題;這可能發生在你不期望的地方,例如在g ++或gfortran的運行時庫中。到 留在安全的一邊,現在就避免使用MinGW-w64。

+0

是的,我已經看到它,不知道這個數據有多可靠。例如,在Enthought python中,即使在AMD64版本中也不會省略libpython27.a。 –

1

問題是您正在使用32位dlltool。可能在C:\ MinGW \ bin中而不是C:\ MinGW64 \ bin中。你可以改變你的路徑,或者專門運行64位工具,如下所示:

C:\MinGW64\bin\dlltool -v --dllname python27.dll --def python27.def --output-lib libpython27.a