Ubuntu 17.10升级后gnome-control-center启动失败:符号查找错误
嘿,这个问题我之前帮好几个用户排查过,本质是GLib库版本不匹配或者残留的旧文件干扰——g_uuid_string_random是GLib 2.54及以上版本才引入的函数,升级后系统里可能混进了旧版GLib文件,导致libgoa-backend-1.0.so.1找不到这个符号。试试下面这些步骤:
1. 先确认GLib版本是否正确
首先检查系统里的GLib库是不是Ubuntu 17.10对应的版本(应该是2.54.x系列):
dpkg -l libglib2.0-0
如果版本低于2.54,那肯定是升级没到位,直接跳到步骤2。
2. 强制重新安装相关核心包
升级过程中可能部分文件没有正确覆盖,强制重新安装GLib、gnome-control-center和goa相关包:
sudo apt update sudo apt install --reinstall libglib2.0-0 libglib2.0-bin gnome-control-center libgoa-1.0-0b libgoa-backend-1.0-1
这个命令会把这些包的文件全部重新替换成系统默认的版本,修复可能的文件损坏或版本不匹配。
3. 排查第三方PPA的版本冲突
很多时候第三方PPA(比如非官方的GNOME或GLib源)会导致库版本混乱,先列出所有已添加的PPA:
ls /etc/apt/sources.list.d/
如果看到比如gnome3-team-gnome3-artful之外的可疑源(比如旧版Ubuntu的源,或者个人维护的GLib源),先禁用它们(可以用software-properties-gtk图形界面操作,或者直接注释掉对应文件里的行),然后执行:
sudo apt update && sudo apt dist-upgrade
让系统把所有包同步到17.10的官方版本。
4. 检查LD_LIBRARY_PATH环境变量
有时候这个环境变量会让系统优先加载非标准路径里的旧版库,先临时取消它再测试:
unset LD_LIBRARY_PATH && gnome-control-center
如果这样能正常运行,说明你的环境变量里加了奇怪的路径。找到设置这个变量的地方(比如~/.bashrc、~/.profile或者/etc/profile),删掉对应的export LD_LIBRARY_PATH=...行,重启终端后再试。
5. 清理残留的旧版GLib文件
如果上面都没用,检查系统里是否有残留的旧版GLib文件:
find /usr -name "libglib-2.0.so*" -type f
重点看/usr/local/lib或者其他非/usr/lib/x86_64-linux-gnu的路径,如果发现版本低于2.54的文件,直接删除它们(注意不要删系统默认路径下的文件!),然后重新运行gnome-control-center。
内容的提问来源于stack exchange,提问作者Jasurbek Nabijonov

