使用Cygwin和dlltool构建64位libpython27.a

5

我正在尝试在64位Win7机器上使用cygwin构建Python扩展DLL(由于cygwin只能作为32位进程运行,因此这实际上是交叉编译)。

我使用dlltool从python27.dll自己创建了libpython27.a(例如在这里中解释),但是在链接器阶段构建失败,显示以下错误:
skipping incompatible c:\Python27\libs/libpython27.a when searching for -lpython27
这正是这里报告的错误(其中那个人最终转向MSVC编译器...)。

更多信息:
- Active Python 2.7.2,win64,x64
- 使用/usr/bin/x86_64-w64-mingw32-g++.exe编译器的最新版本cygwin

有人知道是否支持此操作吗?
我是否错过了使用dlltool的方法?

我找到了使用dlltool的指导,链接如下here。但是在执行时,我遇到了“invalid bfd target”错误。
谢谢!
更新: 我相信这是可以做到的,因为Enthought python包含这样一个文件。我想为不包含此文件的常见发行版创建一个文件。

如果我们知道了这个标志,那它就不会是“秘密”了,对吧? - brc
2个回答

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

0

我不确定你会不会觉得这有帮助,但是在你链接的页面底部有一个指向这里的链接 - 它说:

不要使用MinGW-w64。正如您所注意到的,Python的AMD64版本中省略了MinGW导入库(例如libpython27.a)。这是故意的。不要尝试使用dlltool制作它。目前还没有官方的MinGW-w64发布,它仍处于“beta”阶段并被认为是不稳定的,尽管您可以从TDM-GCC等地方获取64位版本。 mingw运行时与MSVC运行时发生冲突也存在问题;这可能发生在您意想不到的地方,例如g ++或gfortran的运行时库内部。为了保险起见,现在避免使用MinGW-w64。


是的,我看到了,不确定这些数据有多可靠。例如,在Enthought Python中,即使在AMD64版本中也没有省略libpython27.a。 - Uri Cohen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接