MinGW 对“_imp__PyExc_TypeError”的未定义引用
undefined reference to `_imp__PyExc_TypeError' with MinGW
我正在使用以下指令使用 MinGW 在 windows 中编译一个 C dll:
"C:\GNAT15\bin\gcc.exe" -shared -c -IC:\Python27\include *.c
"C:\GNAT15\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:\GNAT15\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 命令中=11=]
注意:gcc中的-lpython27选项必须在最后。
我正在使用以下指令使用 MinGW 在 windows 中编译一个 C dll:
"C:\GNAT15\bin\gcc.exe" -shared -c -IC:\Python27\include *.c
"C:\GNAT15\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:\GNAT15\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 命令中=11=]
注意:gcc中的-lpython27选项必须在最后。