我用的是Ubuntu10.04,之前一直用的好好的,只是前段时间手贱,为了安装一个无聊的软件,添加了一个源:
deb http://cz.archive.ubuntu.com/ubuntu precise main
结果导致系统软件版本冲突,
依赖关系得不到满足,无法再安装任何软件,更新管理器也无法弹出来。
将就着用了一段时间,后来实在受不了了,于是上网搜索,得到了一个解答:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get -f install
我也不管三七二十一,照着做了。折腾了好久,自动下载了一堆软件。但由于有个较新的源,与10.04不太兼容,问题依旧
其中不满足依赖关系的有
libsounda
nautilus
gnome-bluetooth
ppp
....
我不太记得了。
我更是把gnome-bluetooth删除了,又连带要删除其他一大堆东西,结果把gnome也弄出问题了,现象为:
双击jpg文件无法打开,evince无法打开pdf文件,nautilus文件管理器没有标题栏,既无法拖动,也没有“最小化,最大化,关闭”那三个按钮。
于是只好再上网找原因。发现一篇文章,是说可能是软件源冲突造成的。我查看了 /etc/apt/sources.list ,发现除了最后一个源以外,其他的源
的地址上都带有 "lucid" ,而10.04的代号为Lucid Lynx,也就是说,带有lucid的源是可靠的源。于是我把最后那个源注释掉。然后
sudo apt-get update
更新管理器马上弹出来了。
心里那个轻松啊!!!那些依赖关系完全满足了,也可以安装软件了。
但是,等等,那些
双击jpg文件无法打开,evince无法打开pdf文件,nautilus文件管理器没有标题栏,既无法拖动,也没有“最小化,最大化,关闭”那三个按钮。
还是存在。
再上网查,得到一个解答,用metacity --replace可以把标题栏弄出来,试了一下,果然!
接着再解决jpg文件的打开问题。
由于在文件管理器里双击的时候,只得到一个打不开的结果,看不到任何其他信息,所以如果能在终端里用命令打开,或许可以有出错信息。
但我又不知道用什么命令打开图片,只好再上网查找,发现命令是 eog,即 Eye of GNOME,试一下:
eog linux.jpg
终端上显示 无法打开文件 libjpeg.so.62 : No such file or directory
我想肯定是我之前在删除gnome-bluetooth时连带删除了这个文件
但是eog从哪里搜索这个文件呢?或者说ubuntu系统会搜索哪个路径来给应用软件提供这个库呢?
于是强大的 strace 又派上用场了:
strace -o jp eog linux.jpg
运行之后,马上得到文件jp,它记录了软件访问过哪些地方。文件不大,因为它一开始就去找libjpeg.so.62,但没找到,很快就退出了。
用vim打开它,发现它记录了一大堆路径,都是在那里去open库文件libjpeg.so.62的,但全部返回 No such file or directory。
我把这些路径全部提取出来,见下面的列表:
/lib/tls/i686/sse2/cmov/libjpeg.so.62
/lib/tls/i686/sse2/libjpeg.so.62
/lib/tls/i686/cmov/libjpeg.so.62
/lib/tls/i686/libjpeg.so.62
/lib/tls/sse2/cmov/libjpeg.so.62
/lib/tls/sse2/libjpeg.so.62
/lib/tls/cmov/libjpeg.so.62
/lib/tls/libjpeg.so.62
/lib/i686/sse2/cmov/libjpeg.so.62
/lib/i686/sse2/libjpeg.so.62
/lib/i686/cmov/libjpeg.so.62
/lib/i686/libjpeg.so.62
/lib/sse2/cmov/libjpeg.so.62
/lib/sse2/libjpeg.so.62
/lib/cmov/libjpeg.so.62
/lib/libjpeg.so.62
/usr/lib/tls/i686/sse2/cmov/libjpeg.so.62
/usr/lib/tls/i686/sse2/libjpeg.so.62
/usr/lib/tls/i686/cmov/libjpeg.so.62
/usr/lib/tls/i686/libjpeg.so.62
/usr/lib/tls/sse2/cmov/libjpeg.so.62
/usr/lib/tls/sse2/libjpeg.so.62
/usr/lib/tls/cmov/libjpeg.so.62
/usr/lib/tls/libjpeg.so.62
/usr/lib/i686/sse2/cmov/libjpeg.so.62
/usr/lib/i686/sse2/libjpeg.so.62
/usr/lib/i686/cmov/libjpeg.so.62
/usr/lib/i686/libjpeg.so.62
/usr/lib/sse2/cmov/libjpeg.so.62
/usr/lib/sse2/libjpeg.so.62
/usr/lib/cmov/libjpeg.so.62
/usr/lib/libjpeg.so.62
/lib/i486-linux-gnu/tls/i686/sse2/cmov/libjpeg.so.62
/lib/i486-linux-gnu/tls/i686/sse2/libjpeg.so.62
/lib/i486-linux-gnu/tls/i686/cmov/libjpeg.so.62
/lib/i486-linux-gnu/tls/i686/libjpeg.so.62
/lib/i486-linux-gnu/tls/sse2/cmov/libjpeg.so.62
/lib/i486-linux-gnu/tls/sse2/libjpeg.so.62
/lib/i486-linux-gnu/tls/cmov/libjpeg.so.62
/lib/i486-linux-gnu/tls/libjpeg.so.62
/lib/i486-linux-gnu/i686/sse2/cmov/libjpeg.so.62
/lib/i486-linux-gnu/i686/sse2/libjpeg.so.62
/lib/i486-linux-gnu/i686/cmov/libjpeg.so.62
/lib/i486-linux-gnu/i686/libjpeg.so.62
/lib/i486-linux-gnu/sse2/cmov/libjpeg.so.62
/lib/i486-linux-gnu/sse2/libjpeg.so.62
/lib/i486-linux-gnu/cmov/libjpeg.so.62
/lib/i486-linux-gnu/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/i686/sse2/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/i686/sse2/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/i686/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/i686/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/sse2/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/sse2/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/libjpeg.so.62
/usr/lib/i486-linux-gnu/i686/sse2/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/i686/sse2/libjpeg.so.62
/usr/lib/i486-linux-gnu/i686/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/i686/libjpeg.so.62
/usr/lib/i486-linux-gnu/sse2/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/sse2/libjpeg.so.62
/usr/lib/i486-linux-gnu/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/libjpeg.so.62
正好系统里有路径 /lib/tls/i686/cmov,它里头全部是共享库文件,那我只要把libjpeg.so.62放到这个目录下应该就好了。
但我要上哪里去弄到libjpeg.so.62呢?我想系统里头的/usr目录下应该有,那就搜索吧:
find /usr -type f -name "*libjpeg.so.62*"
得到一个结果:
/usr/lib/i386-linux-gnu/libjpeg.so.62.0.0
那就把这个文件复制到 /lib/tls/i686/cmov吧,更好的办法是建立一个link,即
cd /lib/tls/i686/cmov
sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so.62.0.0 libjpeg.so.62
然后eog就可以正常打开图片了。
再解决evince打开pdf的问题,不过此时双击pdf文件,evince已经能工作了。看来也是由于libjpeg.so.62的问题
这是2014年的第一篇博文,记录了对ubuntu的折腾。
UbuntuKylin 14.04快出来了,到时候装到家里的笔记本
~~~~~~~~~~~~~~~
作者详细记录了解决Ubuntu10.04因添加不兼容软件源导致的依赖关系冲突和系统功能异常的过程,包括使用命令行工具更新系统、修复依赖关系、解决文件打开问题等步骤。
2688

被折叠的 条评论
为什么被折叠?



