我滥用 distutils 来编译 Python 的扩展模块,但我没有使用 Python C API,而是使用 ctypes 与生成的共享库进行对话。
这在 Linux 中运行良好,因为它会自动导出共享库中的所有符号,但在 Windows 中 distutils 提供了.def
仅导出 Python 模块的 init 函数。
如何扩展 distutils 以.def
在 Windows 上提供我自己的,以便导出我需要的符号?
如果您使用的是 Mingw 的 GCC,则可以将 ['-Wl,--export-all-symbols'] 作为 extra_link_args 传递。Visual 可能有类似的设置,在 IDE 中的某个地方。
这仅在 distutils 选择使用“gcc -mdll”作为链接器而不是“dllwrap”时才有效。如果您的 ld 版本晚于 2.10.90,它会这样做,如果您使用的是最近的 Mingw,则应该是这种情况。起初它对我不起作用,因为我使用了 Python 2.2,它有一个与版本解析相关的小错误:它需要 3 个点分隔的数字,所以如果 ld 版本是 2.20,它会回退到 dllwrap ...