一、引言
使用开源项目BTrack时,项目中将cpp源码编译成python模块的方式进行调用,但原来的方式是python2模块的方式编译的,电脑上只有python3,后续切环境也比较麻烦就改成python3格式的。
二、修改部分
PyMODINIT_FUNC initbtrack(void)
{
(void)Py_InitModule("btrack", btrack_methods);
import_array();
}
btrack_methods是目标功能函数
python2中可以直接使用(void)Py_InitModule("btrack", btrack_methods);指定生成的模块名称,python3则不行
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
"btrack",
NULL,
sizeof(btrack_methods),
btrack_methods
};
PyMODINIT_FUNC initbtrack(void)
{
import_array();
return PyModule_Create(&moduledef);
}
main入口参数格式修改:
把
Py_SetProgramName(argv[0]);
修改为:
wchar_t *program = Py_DecodeLocale(argv[0], NULL);
Py_SetProgramName(program);
另外该项目上述模块使用了static 关键字,该项目中的libsamplerate安装时需要使用./configure --enable-static XXX
第一次将cpp编译python2模块转换python3格式,后续需要相关问题再补充。