CentOS7系统安装PyMOL时遇到glm相关编译错误该如何解决
报错原因
- 该问题由glm库版本和PyMOL源码的API不匹配导致:
- CentOS 7官方源提供的
glm-devel 0.9.6版本中,没有公开的glm::equal三参数(两个向量+浮点容差)重载实现,该重载是glm 0.9.9及以上版本才新增的特性 - 你当前编译的PyMOL版本是基于新版glm开发的,源码直接调用了新版的三参数
equal函数,旧版glm找不到对应实现,因此抛出匹配失败的报错。
- CentOS 7官方源提供的
解决方法
你可以根据自身需求任选以下一种方案处理:
方案1:替换系统glm为高版本(推荐)
- 先卸载系统自带的旧版glm:
sudo yum remove -y glm-devel
- 下载glm 0.9.9或更高版本的源码压缩包,解压后直接将头文件复制到系统头文件目录:
# 假设解压后的目录为glm-0.9.9.8 cd glm-0.9.9.8 sudo cp -r glm /usr/local/include/
- 重新编译PyMOL,编译时指定优先读取/usr/local/include下的头文件:
# 在PyMOL的build目录下执行 cmake .. -DCMAKE_INCLUDE_PATH=/usr/local/include make -j$(nproc) sudo make install
方案2:使用兼容旧版glm的PyMOL版本
拉取PyMOL 2.3.0及更早版本的源码重新编译即可,该版本的源码未使用新版glm的equal重载,和CentOS7默认的glm 0.9.6版本适配。
方案3:修改PyMOL源码适配旧版glm
打开报错文件layer1/SceneView.cpp,定位到第34行的equal调用代码,将形如:
glm::equal(vec_a, vec_b, epsilon_float)
的代码替换为适配旧版glm的写法:
glm::all(glm::lessThan(glm::abs(vec_a - vec_b), glm::vec3(epsilon_float)))
修改后直接重新执行编译命令即可,无需调整依赖版本。
内容的提问来源于stack exchange,提问作者Yeping Sun
相关产品推荐
相关产品推荐

