今天突然打不开Qtcreator了,运行qtcreator出现提示:
[xj@localhost ]$ qtcreator
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Could not initialize GLX
上网找了一圈:有一个ubuntu的问答社区说需要删掉libGL.so.1。大概原因是mesa的libGL库和nvida的冲突了:https://askubuntu.com/questions/834254/steam-libgl-error-no-matching-fbconfigs-or-visuals-found-libgl-error-failed-t
Ubuntu 16.04+ For anyone still getting same error, if you are using nvidia driver, sometimes you will see that libGL.so.1 points to ambiguous libGL provided by both mesa and nvidia. To test this, you can run this command
$ sudo ldconfig -p | grep -i gl.so
The output was something like:
libwayland-egl.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1
libftgl.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libftgl.so.2
libcogl.so.20 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcogl.so.20
libQt5OpenGL.so.5 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5
libQtOpenGL.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4
libQtOpenGL.so.4 (libc6) => /usr/lib/i386-linux-gnu/libQtOpenGL.so.4
libOpenGL.so.0 (libc6,x86-64) => /usr/lib/nvidia-378/libOpenGL.so.0
libOpenGL.so (libc6,x86-64) => /usr/lib/nvidia-378/libOpenGL.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
libGL.so (libc6,x86-64) => /usr/lib/nvidia-378/libGL.so
libGL.so (libc6) => /usr/lib32/nvidia-378/libGL.so
libEGL.so.1 (libc6,x86-64) => /usr/lib/nvidia-378/libEGL.so.1
libEGL.so.1 (libc6) => /usr/lib32/nvidia-378/libEGL.so.1
libEGL.so (libc6,x86-64) => /usr/lib/nvidia-378/libEGL.so
libEGL.so (libc6) => /usr/lib32/nvidia-378/libEGL.so
Now I just needed to remove the library provided by mesa and everything worked perfectly.
$ sudo rm /usr/lib/i386-linux-gnu/mesa/libGL.so.1
Update: This issue no longer exists from Ubuntu 18.04 LTS.
突然想到我前几天安装过SDL,是一个显示库,难道与libGL有关。。。。
于是我在我目录下查看一下,发现在/usr/lib 和/usr/lib64/ 的目录下都有libGL.so.1
[xj@localhost build]$ sudo find / -iname “*libGL.so*”
/usr/lib/libGL.so.1.0.0
/usr/lib/libGL.so.1
/usr/lib/libGL.so
/usr/lib64/libGL.so.1.0.0
/usr/lib64/libGL.so.1
/usr/lib64/libGL.so
/usr/lib64/libGL.so.1.2.0
分别查看:
[xiaojin@localhost build]$ ll /usr/lib/libGL.so.*
lrwxrwxrwx. 1 root root 14 6月 11 20:43 /usr/lib/libGL.so.1 -> libGL.so.1.0.0
-rwxr-xr-x. 1 root root 528708 6月 11 20:43 /usr/lib/libGL.so.1.0.0
[xiaojin@localhost build]$ ll /usr/lib64/libGL.so.*
lrwxrwxrwx. 1 root root 14 10月 31 11:31 /usr/lib64/libGL.so.1 -> libGL.so.1.2.0
-rwxr-xr-x. 1 root root 665712 6月 11 20:43 /usr/lib64/libGL.so.1.0.0
-rwxr-xr-x. 1 root root 480816 4月 12 2018 /usr/lib64/libGL.so.1.2.0
着重看这一条:
lrwxrwxrwx. 1 root root 14 10月 31 11:31 /usr/lib64/libGL.so.1 -> libGL.so.1.2.0
今天是2018.11.2。 就在几天前,我为了编译ffmpeg的ffplay,装了SDL:
yum install SDL2-devel
这个SDL是个显示库,安装SDL2-devel的时候yum自动为我安装了他的依赖(翻出前几天的安装提示):
正在安装:
SDL2-devel x86_64 2.0.8-5.el7 epel 251 k
为依赖而安装:
libwayland-client x86_64 1.14.0-2.el7 base 32 k
libwayland-server x86_64 1.14.0-2.el7 base 38 k
mesa-libGLES-devel x86_64 17.2.3-8.20171019.el7 base 57 k
为依赖而更新:
SDL2 x86_64 2.0.8-5.el7 epel 416 k
libdrm x86_64 2.4.83-2.el7 base 151 k
libdrm-devel x86_64 2.4.83-2.el7 base 128 k
mesa-libEGL x86_64 17.2.3-8.20171019.el7 base 96 k
mesa-libEGL-devel x86_64 17.2.3-8.20171019.el7 base 33 k
mesa-libGL x86_64 17.2.3-8.20171019.el7 base 156 k
mesa-libGL-devel x86_64 17.2.3-8.20171019.el7 base 157 k
mesa-libGLES x86_64 17.2.3-8.20171019.el7 base 25 k
mesa-libgbm x86_64 17.2.3-8.20171019.el7 base 38 k
mesa-libglapi x86_64 17.2.3-8.20171019.el7 base 43 k
答案就在这里!系统在安装mesa-libGL的时候把我的lib64/libGL.so.1软链指向了 lib64/libGL.so.1.2.0,这个文件的日期是4月份,跟usr/lib文件夹下面的libGL.so都不一样(是6月份安装的),我把 /usr/lib64/libGL.so.1 重新链接到了 /usr/lib64/libGL.so.1.0.0
sudo rm /usr/lib64/libGL.so.1
sudo ln -s /usr/lib64/libGL.so.1.0.0 /usr/lib64/libGL.so.1
现在打开qtcreator就完全没问题啦!