Libfreenect在macOS Big Sur+Python3.9.7下编译Python包装器失败
问题根因
编译报错核心是官方Libfreenect仓库预生成的Python绑定C代码适配的是Python 3.8及更早版本:
- Python 3.9版本正式移除了
struct _typeobject结构体中的tp_print成员,直接触发致命编译错误- 旧代码调用了已废弃的
_PyUnicode_get_wstr_length接口,同时存在冗余代码触发不可达代码警告
Ubuntu环境可正常运行是因为默认搭载的Python版本低于3.9,兼容旧接口。
解决步骤
- 第一步:升级Cython到最新版本,用于生成适配Python 3.9的新C代码
执行命令:pip3 install cython --upgrade - 第二步:进入Libfreenect源码的Python绑定目录(默认路径为
libfreenect/wrappers/python),删除旧的预生成C文件
执行命令:rm freenect.c - 第三步:用新版Cython重新生成适配Python 3.9的C代码
执行命令:cython freenect.pyx - 第四步:修改
setup.py文件屏蔽无关警告,找到extra_compile_args配置项,添加两个警告屏蔽参数,修改后示例如下:extra_compile_args = [ '-fno-strict-aliasing', '-Wno-unreachable-code', '-Wno-deprecated-declarations' ] - 第五步:如果尚未安装Libfreenect核心库,先通过Homebrew安装:
brew install libfreenect - 第六步:重新执行安装命令即可完成编译安装
python3 setup.py install
安装验证
执行以下命令无报错即代表安装成功:python3 -c "import freenect; print('Libfreenect Python绑定安装成功')"
内容的提问来源于stack exchange,提问作者Viperos
相关产品推荐
相关产品推荐

