昨天手一狠,脑子一热,又用源码装了库文件,主要是想安装Gtk4。有了之前装Gtk4翻大车把图形界面搞崩掉的经历,这次指定一下--prefix将Gtk4安装在/opt得了。编译的时候提示gstream-player-1.0 not found,按照之前的做法,将gstream-base通过源码安装就可以,于是,走上了罪恶的道路。
因为感觉比较麻烦,我并没有在虚拟机中进行测试,直接上源码安装,安装后发现系统设置打不开了,于是在系统终端输入gnome-control-center查看错误,发现是如下原因:
gnome-control-center: symbol lookup error: /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37: undefined symbol: gst_gl_display_x11_new_with_display
赶紧去网上查看解决问题的办法,有说使用ldd查看动态链接库详情,使用ldd -r 查看出问题的库文件/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37,结果如下:
ldd -r /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37 |grep gst
libgstapp-1.0.so.0 => /usr/local/lib/x86_64-linux-gnu/libgstapp-1.0.so.0 (0x00007fdf95bd1000)
libgstbase-1.0.so.0 => /lib/x86_64-linux-gnu/libgstbase-1.0.so.0 (0x00007fdf95b4b000)
libgstreamer-1.0.so.0 => /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0 (0x00007fdf959f7000)
libgstpbutils-1.0.so.0 => /usr/local/lib/x86_64-linux-gnu/libgstpbutils-1.0.so.0 (0x00007fdf959b4000)
libgstaudio-1.0.so.0 => /usr/local/lib/x86_64-linux-gnu/libgstaudio-1.0.so.0 (0x00007fdf95938000)
libgsttag-1.0.so.0 => /usr/local/lib/x86_64-linux-gnu/libgsttag-1.0.so.0 (0x00007fdf958f7000)
libgstvideo-1.0.so.0 => /usr/local/lib/x86_64-linux-gnu/libgstvideo-1.0.so.0 (0x00007fdf95840000)
libgstgl-1.0.so.0 => /usr/local/lib/x86_64-linux-gnu/libgstgl-1.0.so.0 (0x00007fdf957c8000)
libgstfft-1.0.so.0 => /usr/local/lib/x86_64-linux-gnu/libgstfft-1.0.so.0 (0x00007fdf957b9000)
undefined symbol: gst_gl_display_x11_new_with_display (/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37)
从结果可以看出,的确是有问题的,但不知道什么意思,遂百度之。有说使用grep -r 搜索对应的文件,虽然不知道是什么意思,但还是照着试了一下:
grep -r gst_gl_display_x11_new_with_display /usr/lib,于是跑出来了俩文件:
匹配到二进制文件 /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.55.6
匹配到二进制文件 /usr/lib/x86_64-linux-gnu/libgstgl-1.0.so.0.1602.0
这下找到出问题的地方了,除了 libwebkit2gtk-4.0.so.37.55.6,还有这么一个libgstgl库文件。按照网上的说法,大致原因应该是链接错误导致的。使用ldd -r /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.55.6 |grep gstgl,发现结果如下:
libgstgl-1.0.so.0 => /usr/local/lib/x86_64-linux-gnu/libgstgl-1.0.so.0 (0x00007f7d535e0000)
libgstgl文件被链接在/usr/local/lib中,我使用grep -r gst_gl_display_x11_new_with_display /usr/local/lib/x86_64-linux-gnu/libgstgl-1.0.so.0,果然没有发现任何结果,莫非真的是这个文件的错误导致的?
上面grep匹配到/usr/lib/x86_64-linux-gnu/libgstgl-1.0.so.0.1602.0,它的软链接为:/usr/lib/x86_64-linux-gnu/libgstgl-1.0.so.0,我将/usr/local/lib/x86_64-linux-gnu/libgstgl-1.0.so.0删除后,cp /usr/lib/x86_64-linux-gnu/libgstgl-1.0.so.0 /usr/local/lib/x86_64-linux-gnu/
然后,gnome-control-center,复活了
今天也是一个惨痛教训呢,以后务必在虚拟机中测试一番