使用 cygwin、dlltool 构建 64 位 libpython27.a

发布于 2024-12-05 21:19:28 字数 1074 浏览 1 评论 0原文

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

我使用 dlltool 从 python27.dll 自己创建了 libpython27.a (例如,此处 ),但是构建在链接器阶段失败,并显示
搜索 -lpython27 时跳过不兼容的 c:\Python27\libs/libpython27.a
这正是此处报告的错误(该人最终转向 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
但这样做时,我从 dlltool 收到“无效的 bfd 目标”错误)

谢谢!

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

I'm trying to build a python extension DLL on a 64bit Win7 machine using cygwin (as cygwin only run as 32bit process, this is actually cross-compiling).

I created libpython27.a myself from python27.dll using dlltool (as explained, for example, here), but the build fail during the linker phase saying
skipping incompatible c:\Python27\libs/libpython27.a when searching for -lpython27
This is exactly the error reported here (where the guy ended up moving to MSVC compiler...).

More info:
- Active Python 2.7.2, win64, x64
- latest version of cygwin, using the /usr/bin/x86_64-w64-mingw32-g++.exe compiler

Does anyone know if this is supported?
Is there way to use dlltool which I miss here?

(I did found here the guidance to use
dlltool --as-flags=--64 -m i386:x86-64 -k -l libpython27.a -d python.def
but when doing so I got "invalid bfd target" error from dlltool)

Thanks!

Update: I believe it can be done because Enthought python contains such a file. I would like to create one for the more common distributions which don't contain it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

錯遇了你 2024-12-12 21:19:28

问题是您使用的是 32 位 dlltool。可能在 C:\MinGW\bin 而不是 C:\MinGW64\bin 中。您可以更改路径,或专门运行 64 位工具,如下所示:

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

The problem is that you are using the 32 bit dlltool. Probably in C:\MinGW\bin instead of C:\MinGW64\bin. You can change your path, or run the 64 bit tool specifically as such:

C:\MinGW64\bin\dlltool -v --dllname python27.dll --def python27.def --output-lib libpython27.a
枕梦 2024-12-12 21:19:28

我不确定您觉得这有多大帮助,但在您链接到的页面底部有一个指向此处< /a> - 它说:

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

I'm not sure how helpful you find this, but at the bottom of the page you linked to there's a link to here - Where it says:

Do not use MinGW-w64. As you will notice, the MinGW import library for
Python (e.g. libpython27.a) is omitted from the AMD64 version of
Python. This is deliberate. Do not try to make one using dlltool.
There is no official MinGW-w64 release yet, it is still in "beta" and
considered unstable, although you can get a 64-bit build from e.g.
TDM-GCC. There have also been issues with the mingw runtime
conflicting with the MSVC runtime; this can happen from places you
don't expect, such as inside runtime libraries for g++ or gfortran. To
stay on the safe side, avoid MinGW-w64 for now.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文