在Windows 7(64位)上使用Cython和MinGW编译Python 3.5代码
发布时间:2020-12-14 02:54:54 所属栏目:Windows 来源:网络整理
导读:我正在尝试设置一个工作流程,用于在 Windows 7 64位上使用Cython和MinGW从 Python 3.5.1代码生成.pyd和.exe文件. 我有一个简单的example.py文件: def hello(x): print("Hello",x)if __name__=='__main__': hello("World!") 从SO上的其他线程,我得到了下面的
我正在尝试设置一个工作流程,用于在
Windows 7 64位上使用Cython和MinGW从
Python 3.5.1代码生成.pyd和.exe文件.
我有一个简单的example.py文件: def hello(x): print("Hello",x) if __name__=='__main__': hello("World!") 从SO上的其他线程,我得到了下面的Cython命令,它生成一个没有警告的.c文件. cython --embed -o example.c example.py 当我调用gcc时,我收到以下警告,并且不太清楚这些是否至关重要. gcc -c -IC:Python35include -o example.o example.c In file included from C:Python35include/Python.h:65:0,from example.c:4: C:Python35include/pytime.h:113:5: warning: 'struct timeval' declared inside pa rameter list [enabled by default] _PyTime_round_t round); ^ C:Python35include/pytime.h:113:5: warning: its scope is only this definition o r declaration,which is probably not what you want [enabled by default] C:Python35include/pytime.h:118:5: warning: 'struct timeval' declared inside pa rameter list [enabled by default] _PyTime_round_t round); 当我使用gcc生成.pyd文件时,我得到一堆未定义的引用消息和ld退出并显示错误状态. gcc -shared -LC:Python35libs -o example.pyd example.o -lpython35 example.o:example.c:(.text+0x46): undefined reference to `_imp__PyObject_GetAttr ' example.o:example.c:(.text+0xad): undefined reference to `_imp__PyTuple_New' example.o:example.c:(.text+0x1be): undefined reference to `_imp___Py_NoneStruct' example.o:example.c:(.text+0x1c6): undefined reference to `_imp___Py_NoneStruct' example.o:example.c:(.text+0x1d0): undefined reference to `_imp___Py_NoneStruct' example.o:example.c:(.text+0x2e2): undefined reference to `_imp__PyTuple_Pack' example.o:example.c:(.text+0x3bc): undefined reference to `_imp__PyCode_New' example.o:example.c:(.text+0x409): undefined reference to `_imp__PyTuple_Pack' example.o:example.c:(.text+0x4f3): undefined reference to `_imp__PyTuple_New' example.o:example.c:(.text+0x53a): undefined reference to `_imp__PyBytes_FromStr ingAndSize' example.o:example.c:(.text+0x5a5): undefined reference to `_imp__PyModule_Create 2' example.o:example.c:(.text+0x5e5): undefined reference to `_imp__PyModule_GetDic t' example.o:example.c:(.text+0x630): undefined reference to `_imp__PyImport_AddMod ule' example.o:example.c:(.text+0x682): undefined reference to `_imp__PyObject_SetAtt rString' example.o:example.c:(.text+0x6ef): undefined reference to `_imp__PyObject_SetAtt rString' example.o:example.c:(.text+0x715): undefined reference to `_imp__PyImport_GetMod uleDict' example.o:example.c:(.text+0x756): undefined reference to `_imp__PyDict_GetItemS tring' example.o:example.c:(.text+0x778): undefined reference to `_imp__PyDict_SetItemS tring' example.o:example.c:(.text+0x87e): undefined reference to `_imp__PyDict_SetItem' example.o:example.c:(.text+0xa7f): undefined reference to `_imp__PyDict_New' example.o:example.c:(.text+0xac8): undefined reference to `_imp__PyDict_SetItem' example.o:example.c:(.text+0xc04): undefined reference to `_imp__PyErr_Occurred' example.o:example.c:(.text+0xc0f): undefined reference to `_imp__PyExc_ImportErr or' example.o:example.c:(.text+0xc21): undefined reference to `_imp__PyErr_SetString ' example.o:example.c:(.text+0xc5f): undefined reference to `_imp__PyExc_NameError ' example.o:example.c:(.text+0xc78): undefined reference to `_imp__PyErr_Format' example.o:example.c:(.text+0xcb8): undefined reference to `_imp__PyObject_Call' example.o:example.c:(.text+0xcc4): undefined reference to `_imp__PyThreadState_G et' example.o:example.c:(.text+0xcd7): undefined reference to `_imp___Py_CheckRecurs ionLimit' example.o:example.c:(.text+0xcf1): undefined reference to `_imp___Py_CheckRecurs iveCall' example.o:example.c:(.text+0xd2a): undefined reference to `_imp__PyThreadState_G et' example.o:example.c:(.text+0xd3d): undefined reference to `_imp___Py_CheckRecurs ionLimit' example.o:example.c:(.text+0xd4b): undefined reference to `_imp___Py_CheckRecurs ionLimit' example.o:example.c:(.text+0xd57): undefined reference to `_imp___Py_CheckRecurs ionLimit' example.o:example.c:(.text+0xd6d): undefined reference to `_imp__PyThreadState_G et' example.o:example.c:(.text+0xd86): undefined reference to `_imp__PyErr_Occurred' example.o:example.c:(.text+0xd99): undefined reference to `_imp__PyExc_SystemErr or' example.o:example.c:(.text+0xdab): undefined reference to `_imp__PyErr_SetString ' example.o:example.c:(.text+0xdcb): undefined reference to `_imp__PyImport_AddMod ule' example.o:example.c:(.text+0xe02): undefined reference to `_imp__PyObject_GetAtt rString' example.o:example.c:(.text+0xe25): undefined reference to `_imp__PyExc_TypeError ' example.o:example.c:(.text+0xe3b): undefined reference to `_imp__PyErr_Format' example.o:example.c:(.text+0xe61): undefined reference to `_imp__PyExc_TypeError ' example.o:example.c:(.text+0xe77): undefined reference to `_imp__PyErr_Format' example.o:example.c:(.text+0xe83): undefined reference to `_imp__PyExc_Attribute Error' example.o:example.c:(.text+0xe8d): undefined reference to `_imp__PyErr_Exception Matches' example.o:example.c:(.text+0xe9d): undefined reference to `_imp__PyErr_Clear' example.o:example.c:(.text+0xeaa): undefined reference to `_imp__PyType_Ready' example.o:example.c:(.text+0xece): undefined reference to `_imp__PyObject_SetAtt rString' example.o:example.c:(.text+0xf95): undefined reference to `_imp__PyUnicode_FromS tring' example.o:example.c:(.text+0xfbb): undefined reference to `_imp___Py_NoneStruct' example.o:example.c:(.text+0xfc5): undefined reference to `_imp___Py_NoneStruct' example.o:example.c:(.text+0xfcc): undefined reference to `_imp___Py_NoneStruct' example.o:example.c:(.text+0xffd): undefined reference to `_imp___Py_NoneStruct' example.o:example.c:(.text+0x107e): undefined reference to `_imp__PyUnicode_Inte rnFromString' example.o:example.c:(.text+0x10e7): undefined reference to `_imp__PyExc_TypeErro r' example.o:example.c:(.text+0x10f9): undefined reference to `_imp__PyErr_SetStrin g' example.o:example.c:(.text+0x11ac): undefined reference to `_imp__PyExc_TypeErro r' example.o:example.c:(.text+0x11be): undefined reference to `_imp__PyErr_SetStrin g' example.o:example.c:(.text+0x1240): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x1272): undefined reference to `_imp__PyDict_New' example.o:example.c:(.text+0x12c1): undefined reference to `_imp__PyExc_TypeErro r' example.o:example.c:(.text+0x12d3): undefined reference to `_imp__PyErr_SetStrin g' example.o:example.c:(.text+0x12fe): undefined reference to `_imp__PyExc_TypeErro r' example.o:example.c:(.text+0x1310): undefined reference to `_imp__PyErr_SetStrin g' example.o:example.c:(.text+0x1398): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x13a2): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x13a9): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x13c8): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x1485): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x148f): more undefined references to `_imp___Py_None Struct' follow example.o:example.c:(.text+0x14ab): undefined reference to `_imp__PyExc_TypeErro r' example.o:example.c:(.text+0x14bd): undefined reference to `_imp__PyErr_SetStrin g' example.o:example.c:(.text+0x1572): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x1598): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x15a2): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x15be): undefined reference to `_imp__PyExc_TypeErro r' example.o:example.c:(.text+0x15d0): undefined reference to `_imp__PyErr_SetStrin g' example.o:example.c:(.text+0x1685): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x16ab): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x16d0): undefined reference to `_imp__PyExc_TypeErro r' example.o:example.c:(.text+0x16e2): undefined reference to `_imp__PyErr_SetStrin g' example.o:example.c:(.text+0x1778): undefined reference to `_imp__PyDict_New' example.o:example.c:(.text+0x17c3): undefined reference to `_imp__PyUnicode_From String' example.o:example.c:(.text+0x17d8): undefined reference to `_imp___PyObject_GC_N ew' example.o:example.c:(.text+0x1913): undefined reference to `_imp__PyObject_GC_Tr ack' example.o:example.c:(.text+0x1cef): undefined reference to `_imp__PyMem_Free' example.o:example.c:(.text+0x1d13): undefined reference to `_imp__PyObject_GC_Un Track' example.o:example.c:(.text+0x1d2a): undefined reference to `_imp__PyObject_Clear WeakRefs' example.o:example.c:(.text+0x1d42): undefined reference to `_imp__PyObject_GC_De l' example.o:example.c:(.text+0x2030): undefined reference to `_imp__PyMethod_New' example.o:example.c:(.text+0x203f): undefined reference to `_imp__PyInstanceMeth od_New' example.o:example.c:(.text+0x2048): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x206c): undefined reference to `_imp__PyMethod_New' example.o:example.c:(.text+0x207b): undefined reference to `_imp__PyInstanceMeth od_New' example.o:example.c:(.text+0x20a2): undefined reference to `_imp__PyUnicode_From Format' example.o:example.c:(.text+0x20c5): undefined reference to `_imp__PyCFunction_Ca ll' example.o:example.c:(.text+0x20d4): undefined reference to `_imp__PyCFunction_Ca ll' example.o:example.c:(.text+0x211b): undefined reference to `_imp__PyDict_GetItem ' example.o:example.c:(.text+0x216e): undefined reference to `_imp__PyUnicode_Type ' example.o:example.c:(.text+0x2184): undefined reference to `_imp__PyUnicode_Type ' example.o:example.c:(.text+0x21bb): undefined reference to `_imp___PyUnicode_Rea dy' example.o:example.c:(.text+0x21e3): undefined reference to `_imp___PyUnicode_Rea dy' example.o:example.c:(.text+0x260b): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x2625): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x2650): undefined reference to `_imp__PyObject_RichC ompare' example.o:example.c:(.text+0x286b): undefined reference to `_imp__PyMem_Malloc' example.o:example.c:(.text+0x299f): undefined reference to `_imp__PyMem_Realloc' example.o:example.c:(.text+0x2a79): undefined reference to `_imp__PyUnicode_From String' example.o:example.c:(.text+0x2ab2): undefined reference to `_imp__PyUnicode_From Format' example.o:example.c:(.text+0x2ac4): undefined reference to `_imp__PyUnicode_From String' example.o:example.c:(.text+0x2b60): undefined reference to `_imp__PyCode_New' example.o:example.c:(.text+0x2cca): undefined reference to `_imp__PyThreadState_ Get' example.o:example.c:(.text+0x2ce7): undefined reference to `_imp__PyFrame_New' example.o:example.c:(.text+0x2d08): undefined reference to `_imp__PyTraceBack_He re' example.o:example.c:(.text+0x2da1): undefined reference to `_imp__Py_SetProgramN ame' example.o:example.c:(.text+0x2da8): undefined reference to `_imp__Py_Initialize' example.o:example.c:(.text+0x2dc8): undefined reference to `_imp__PySys_SetArgv' example.o:example.c:(.text+0x2de8): undefined reference to `_imp__PyErr_Occurred ' example.o:example.c:(.text+0x2df3): undefined reference to `_imp__PyErr_Print' example.o:example.c:(.text+0x2e3a): undefined reference to `_imp__Py_Finalize' example.o:example.c:(.text+0x2e77): undefined reference to `_imp__PyOS_snprintf' example.o:example.c:(.text+0x2e7e): undefined reference to `_imp__Py_GetVersion' example.o:example.c:(.text+0x2e9f): undefined reference to `_imp__PyOS_snprintf' example.o:example.c:(.text+0x2eed): undefined reference to `_imp__PyOS_snprintf' example.o:example.c:(.text+0x2f0d): undefined reference to `_imp__PyErr_WarnEx' example.o:example.c:(.text+0x2f5a): undefined reference to `_imp__PyUnicode_Inte rnFromString' example.o:example.c:(.text+0x2f9f): undefined reference to `_imp__PyUnicode_Deco de' example.o:example.c:(.text+0x2fc5): undefined reference to `_imp__PyUnicode_From StringAndSize' example.o:example.c:(.text+0x2feb): undefined reference to `_imp__PyBytes_FromSt ringAndSize' example.o:example.c:(.text+0x3028): undefined reference to `_imp___Py_TrueStruct ' example.o:example.c:(.text+0x3039): undefined reference to `_imp___Py_FalseStruc t' example.o:example.c:(.text+0x304c): undefined reference to `_imp___Py_NoneStruct ' example.o:example.c:(.text+0x306b): undefined reference to `_imp__PyObject_IsTru e' collect2.exe: error: ld returned 1 exit status 我究竟做错了什么? 我有什么需要改变我的工作流程来生成一个独立的.exe文件? 解决方法
在J.J.的帮助下Hakala,我找到了以下命令来生成所需的输出文件:
pyd 32bit cython -o example.c example.py gcc -c -Ofast -IC:Python35-32include -o example.o example.c gcc -shared -LC:Python35-32libs -o example.pyd example.o -lpython35 pyd 64bit cython -o example.c example.py gcc -c -DMS_WIN64 -Ofast -IC:Python35include -o example.o example.c gcc -shared -LC:Python35libs -o example.pyd example.o -lpython35 exe 64bit cython --embed -o example.c example.py gcc -municode -DMS_WIN64 -mthreads -Wall -O -IC:Python35include -LC:Python35libs example.c -lpython35 -o example.exe 非常感谢J.J. Hakala为您提供支持. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |