widiot的博客

生也有涯,学无止境;学而不思则罔!

【Ubuntu】Ubuntu16.04下WPS演示闪退

问题描述


Ubuntu16.04在更新了NVIDIA驱动之后,出现WPS演示闪退

在命令行运行WPS演示

$ cd /opt/kingsoft/wps-office/office6
$ ./wpp

得到的错误信息如下

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Critical: Errors linking simple shader: ""
Critical: Errors linking blit shader: ""
段错误 (核心已转储)

可能是没有使用NVIDIA驱动的libGL库导致的

删除/usr/lib/i386-linux-gnu/mesa/libGL.so.1

参考Steam: libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast

如果使用nvidia驱动程序,有时会看到libGL.so.1指向由mesa和NVIDIA提供的模糊libGL(即有多个libGL)。运行如下命令测试

$ sudo ldconfig -p | grep -i gl.so

输出如下

...
libGL.so.1 (libc6,x86-64) => /usr/lib/nvidia-378/libGL.so.1
libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/mesa/libGL.so.1
libGL.so.1 (libc6) => /usr/lib32/nvidia-378/libGL.so.1
...

可以看到有mesa提供的libGL.so.1,也有NVIDIA提供的

现在只需要移除mesa提供的libGL.so.1,就可以恢复正常

$ sudo rm /usr/lib/i386-linux-gnu/mesa/libGL.so.1

上面的方法是别人提供的,我照做了,但是问题仍然没有解决,因为我的链接不是多了libGL.so.1,而是多了libGL.so,如下所示

...
libGL.so.1 (libc6,x86-64) => /usr/lib/nvidia-384/libGL.so.1
libGL.so.1 (libc6) => /usr/lib32/nvidia-384/libGL.so.1
libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so
libGL.so (libc6,x86-64) => /usr/lib/nvidia-384/libGL.so
libGL.so (libc6) => /usr/lib32/nvidia-384/libGL.so
...

可是我没有删除/usr/lib/x86_64-linux-gnu/libGL.so,因为我不敢 :),所以我采用了以下方法,重定向/usr/lib/x86_64-linux-gnu/libGL.so

重链接/usr/lib/x86_64-linux-gnu/libGL.so

参考解决Ubuntu WPS演示全屏闪退(swrast_dri.so: undefined symbol: _glapi_tls_Dispatch)的错误

先找到libGL.so的位置(其实不必要)

$ locate libGL.so

然后备份libGL.so,再重新创建链接,指向NVIDIA的libGL.so

$ sudo mv /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGL.so.bak
$ sudo ln -s /usr/lib/nvidia-352/libGL.so.352.63 /usr/lib/x86_64-linux-gnu/libGL.so

这样就可以了,我的问题就得到了解决。不需要重新创建libglx.so的链接,也不需要注意循环登录问题

不过之前我参考该博客一步一步执行,说是要那样做才不会出现循环登录问题,我照做了最后却出现了循环登录的问题,害得我重新安装了NVIDA驱动、CUDA和cuDNN,差点就想重装系统了,后来查看了错误报告,如下

$ vim ~/.xsession-errors

然后根据里面的错误信息正确解决了循环登录问题

重复登录

重新安装NVIDIA驱动后出现了重复登录的问题,最后根据资料和自己的理解,找到了解决方法,如下所示

sudo rm  /usr/lib/x86_64-linux-gnu/libGL.so.1
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGL.so.1

其实就是参考的博客中把libGL.so.1和libGL.so的顺序搞错了

总结


正确的操作步骤应该是

  1. 先查看自己的系统中是libGL.so多了,还是libGL.so.1多了
  2. 根据实际情况修改或删除多出来的libGL.so或libGL.so.1
  3. 修改还是删除,自己决定,但是千万记得备份
阅读更多
版权声明:知识需要传播,如有需要,请任意转载 https://blog.csdn.net/White_Idiot/article/details/79950501
个人分类: Linux
上一篇【TensorFLow】Ubuntu16.04安装CUDA8.0+cuDNN6.0+TensorFlow
下一篇【Linux】MBR磁盘分区表只能有四个分区?
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭