作为菜鸟初步尝试python中的c++扩展遇见一些问题,或许是由于问题过于基础,以至于在网络上求助无方,幸得一篇短文,用此法得以解决,在此表示感谢。以下直接进入主题
坑1、 Py_InitModule在python3中被弃用 导致编译时无法识别Py_InitModule
PyMODINIT_FUNC initcModPyDem(void) { Py_InitModule("cModPyDem",module_methods,"a module"); }
使用如下代码替代
static struct PyModuleDef EtestStr= { PyModuleDef_HEAD_INIT, "Etest", /* name of module */ "", /* module documentation, may be NULL */ -1, /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ module_methods };
PyMODINIT_FUNC PyInit_modulename(void) { return PyModule_Create(&EtestStr); }
坑2、替代之后 又遇一坑:
PyInit_modulname的函数名称中,modulname必须为Etest结构中的"Etest"的 modulename相同,否则便会触发Linkerror的无法识别的解析符号。
更换如下:
PyMODINIT_FUNC PyInit_Etest(void) //Etest便为module name</