安装mujoco_py时出现Cython编译错误求助
解决MuJoCo-Py编译时回调函数类型不兼容问题
问题根源
这个编译错误是因为新版GCC(GCC 7及以上版本)对C异常处理的检查更严格,而mujoco_py的cymj.pyx文件中定义的回调函数未符合现代C的noexcept要求,导致函数指针类型不匹配。
修复步骤
定位
cymj.pyx文件
如果你是通过pip安装的mujoco_py,执行以下命令找到文件位置:python3 -c "import mujoco_py; print(mujoco_py.__file__)"进入输出的目录,找到核心源码文件夹里的
cymj.pyx文件。修改回调函数声明
打开cymj.pyx,找到报错提示的回调函数定义(通常是日志或消息回调相关的函数),将原来的:void (const char *) except * nogil替换为:
void (const char *) noexcept nogil注意要把所有同类型的回调函数声明和实现都做相同修改。
重新编译
mujoco_py
先清理旧编译缓存并卸载原有版本:pip uninstall -y mujoco_py rm -rf ~/.cache/mujoco_py再重新安装(强制不使用缓存):
pip install mujoco_py --no-cache-dir如果你是从源码安装的,进入
mujoco_py目录后执行:python setup.py build_ext --inplace pip install -e .验证修复效果
重新运行你的脚本:python3 setting_state.py
额外提示
- 建议使用GCC 9或10版本,过高版本可能还会触发其他兼容性问题
- 替换GLEW版本后,可通过以下命令确认动态链接库路径正确:
ldconfig -p | grep glew
内容的提问来源于stack exchange,提问作者Vicky RDK
相关产品推荐
相关产品推荐

