我正在使用以下说明在 Windows 中使用 MinGW 编译 C dll:

"C:\GNAT\2015\bin\gcc.exe" -shared -c -IC:\Python27\include *.c
"C:\GNAT\2015\bin\gcc.exe" -shared -Wall -O3 -IC:\Python27\include -L./ -l dependency_lib -LC:\Python27\libs *.o -o mylib.pyd -lpython27

我在链接过程中遇到了几个这样的错误:
(.text+0x5a2): undefined reference to `_imp__PyExc_TypeError'
(.text+0x69f): undefined reference to `_imp___Py_NoneStruct'

我尝试将 .lib 转换为 .a 但我得到:
/libpython27.a: file format not recognized; treating as linker script

知道我做错了什么吗?非常感谢

最佳答案

看起来 MinGW 编译器需要一个 python27.a 而不是 python27.lib。但是, .lib 的生成方式非常重要 。对我来说,它起作用的唯一方法是:

  • 获取python27.dll。我从“C:\GNAT\2015\bin\python27.dll”得到它。它也可能在“windows/system32”中。
  • 使用 pexport 生成 .def 文件。 忘记其他选项,例如使用 sed 它对我不起作用。运行 pexports.exe python27.dll > python27.def
  • 使用 MinGW 的 dlltool:
    dlltool --dllname python27.dll --def python27.def --output-lib libpython27.a
  • 将生成的 libpython27.a 放在 C:\Python27\libs 中,不要忘记使用 -LC:\Python27\libs 将此路径添加到您的 gcc 命令中

  • 注意:gcc 中的 -lpython27 选项必须在最后。

    Source

    关于python - 使用 MinGW 未定义对 `_imp__PyExc_TypeError' 的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40533566/

    10-11 19:24