5

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

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

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

有谁知道这是否支持?
有没有办法使用我在这里想念的 dlltool?

(我确实在这里找到了使用指南,
dlltool --as-flags=--64 -m i386:x86-64 -k -l libpython27.a -d python.def
但是这样做时我"invalid bfd target"从 dlltool 得到错误)

谢谢!

更新:我相信它可以做到,因为Enthought python包含这样一个文件。我想为不包含它的更常见的发行版创建一个。

4

2 回答 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
于 2013-01-31T17:07:41.907 回答
0

我不确定你找到这个有多大帮助,但在你链接到的页面底部有一个链接到这里- 它说:

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

于 2011-09-30T20:09:36.890 回答