2011-09-20 93 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