这一次的升级由于一次错误的操作,就是换了ubuntu 8.10 软件源后,升级之前没有做必要的更新。(请参照,旧贴:通过网络升级安装Ubuntu 8.10 Intrepid Ibex 红色标记部分)导致升级以后编译环境自动失效,同时安装gtk也装不上去。
libnspr4-dev: 依赖: libnspr4-0d (<= 4.7.1+1.9-0ubuntu4.1~) 但是 4.7.2~b2-0ubuntu1~fta1~hardy 正要被安装
E: 无法安装的软件包
现
在好理解了,原来是由于gnome-devel最终依赖于libnspr4-0d (<= 4.7.1+1.9-0ubuntu4.1~)
要特别注意版本,可是已经安装了更新的版本同时发现,ubuntu8.10的源中已经没有了这个libnspr4-0d (<=
4.7.1+1.9-0ubuntu4.1~)文件,只有一个libnspr4-0d
(4.7.2~b2-0ubuntu1~fta1~hardy)被安装。
反正一定是需要有个libnspr4-0d (<= 4.7.1+1.9-0ubuntu4.1~)的文件。google很轻松地在ubuntu8.04找到这个文件,下载下来,看来只能手动通过 dpkg命令来安装了。
open-baike@open-baike-desktop:~/桌面$ sudo dpkg -i --ignore-depends=libnspr4-0d libnspr4-0d_4.7.1+1.9-0ubuntu0.8.04.5_i386.deb
dpkg - 警告:即将把 libnspr4-0d 从 4.7.2~b2-0ubuntu1~fta1~hardy 降级到 4.7.1+1.9-0ubuntu0.8.04.5。
命令:
-i|–install <.deb 文件名> … | -R|–recursive <目录> …
–unpack <.deb 文件名> … | -R|–recursive <目录> …
-A|–record-avail <.deb 文件名> … | -R|–recursive <目录> …
–configure <软件包名> … | -a|–pending
–triggers-only <软件包名> … | -a|–pending
-r|–remove <软件包名> … | -a|–pending
-P|–purge <软件包名> … | -a|–pending
–get-selections [<表达式> ...] 把已选中的软件包列表打印到标准输出。
–set-selections 从标准输入里读出要选择的软件。
–clear-selections 取消选中所有不必要的软件包。
–update-avail <软件包文件> 替换现有可安装的软件包信息。
–merge-avail <软件包文件> 把文件中的信息合并到系统中。
–clear-avail 清除现有的软件包信息。
–forget-old-unavail 忘却已被卸载的不可安装的软件包。
-s|–status <软件包名> … 显示软件包详尽的状态信息。
-p|–print-avail <软件包名> … 显示可供安装的版本详情。
-L|–listfiles <软件包名> … 列出所有“属于”该软件包(或多个)的文件。
-l|–list [<表达式> ... 简明地列出软件包的状态。
-S|--search <表达式> ... 搜寻拥有该文件(或多个文件)的包。
-C|--audit 检查搜寻残损的软件包。
--print-architecture 显示 dpkg 体系架构。
--compare-vesions <关系> 比较版本号 - 见下。
--force-help 显示本强制选项的帮助信息。
-Dh|--debug=help 显示有关出错调试的帮助信息。
-h|--help 显示本帮助信息。
--version 显示版本信息。
--license | --licence 显示版权和许可证条文。
对归档文件使用 dpkg -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|
-x|--extract|-X|--vextract|--fsys-tarfile (输入 dpkg-deb --help)。
供内部使用:dpkg --assert-support-predepends | --predep-package |
--assert-working-epoch | --assert-long-filenames | --assert-multi-conrep。
选项:
--admindir=<目录> 使用 <目录> 而非 /var/lib/dpkg。
--root=<目录> 安装到另一个根文件系统。
--instdir=<目录> 改变安装的根目录的同时保持管理(admin)目录不变。
-O|--selected-only 忽略没有被选中安装或升级的软件包。
-E|--skip-same-version 忽略版本与已安装软件版本相同的软件包。
-G|--refuse-downgrade 忽略版本早于已安装软件版本的的软件包。
-B|--auto-deconfigure 就算会影响其他软件包,也要安装。
--[no-]triggers 跳过或强制随之发生的触发器处理。
–no-debsig 不去试图验证软件包的签名。
–no-act|–dry-run|–simulate
仅仅报告我们要执行的操作 - 但是不执行。
-D|–debug=<八进制数字> 开启调试功能(参见 -Dhelp 或者 –debug=help)。
–status-fd 发送状态改变的更新信号到文件描述符。
–log=<文件名> 把状态的更动和操作信息记录到 <文件名>。
–ignore-depends=<软件包名>,…
忽略关于 <软件包名> 的所有依赖关系。
–force-… 忽视遇到的问题(参见 –force-help)。
–no-force-…|–refuse-…
当遇到问题时中止运行。
–abort-after 遇到个错误后终止。
可供–compare-version 使用的比较运算符有:
lt le eq ne ge gt (如果版本号为空,那么就认为它先于任意版本号);
lt-nl le-nl ge-nl gt-nl (如果版本号为空,那么就认为它后于任意版本号);
< << <= = >= >> > (仅仅是为了与主控文件的语法兼容)。
Ubuntu循环依赖(Cycle Dependency)的解决[免编译+解决步骤]:
最近在VMware中安装了一个Ubuntu系统。由于创建系统时没有要求安装虚拟网卡,因此需要安装Ubuntu的软件包时,需要自己下载deb
文件,拖进系统,然后双击调用gdebi进行安装。可是,当我尝试安装G++时却出现了问题:g++-4.1这个包依赖libstdc++6-4.1-
dev这个包(也就是C++库),而libstdc++6-4.1-dev又依赖g++-4.1。结果两个包都装不上。
上网搜索,在Ubuntu官方论坛找到了解决方法:
在命令行下执行以下语句
代码:
sudo dpkg -i –ignore-depends=libstdc++6-4.1-dev g++-4.1_4.1.2-0ubuntu4_i386.deb
sudo dpkg -i –ignore-depends=g++-4.1 libstdc++6-4.1-dev_4.1.2-0ubuntu4_i386.deb
即可。
(g++-4.1默认安装包名为g++-4.1_4.1.2-0ubuntu4_i386.deb;libstdc++6-4.1-dev默认安装包名为libstdc++6-4.1-dev_4.1.2-0ubuntu4_i386.deb)
也就是说,强行让两个安装包忽略依赖项。
使用apt-get自动安装应该没有这种问题。
附:dpkg命令中文帮助信息
用法:dpkg [<选项> ...] <命令>
命令:
代码:
-i|–install <.deb 文件名> … | -R|–recursive <目录> …
–unpack <.deb 文件名> … | -R|–recursive <目录> …
-A|–record-avail <.deb 文件名> … | -R|–recursive <目录> …
–configure <软件包名> … | -a|–pending
–triggers-only <软件包名> … | -a|–pending
-r|–remove <软件包名> … | -a|–pending
-P|–purge <软件包名> … | -a|–pending
–get-selections [<表达式> ...] 把已选中的软件包列表打印到标准输出。
–set-selections 从标准输入里读出要选择的软件。
–clear-selections 取消选中所有不必要的软件包。
–update-avail <软件包文件> 替换现有可安装的软件包信息。
–merge-avail <软件包文件> 把文件中的信息合并到系统中。
–clear-avail 清除现有的软件包信息。
–forget-old-unavail 忘却已被卸载的不可安装的软件包。
-s|–status <软件包名> … 显示软件包详尽的状态信息。
-p|–print-avail <软件包名> … 显示可供安装的版本详情。
-L|–listfiles <软件包名> … 列出所有“属于”该软件包(或多个)的文件。
-l|–list [<表达式> ... 简明地列出软件包的状态。
-S|--search <表达式> ... 搜寻拥有该文件(或多个文件)的包。
-C|--audit 检查搜寻残损的软件包。
--print-architecture 显示 dpkg 体系架构。
--compare-vesions <关系> 比较版本号 - 见下。
--force-help 显示本强制选项的帮助信息。
-Dh|--debug=help 显示有关出错调试的帮助信息。
-h|--help 显示本帮助信息。
--version 显示版本信息。
--license | --licence 显示版权和许可证条文。
对归档文件使用 dpkg -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|
-x|--extract|-X|--vextract|--fsys-tarfile (输入 dpkg-deb --help)。
供内部使用:dpkg --assert-support-predepends | --predep-package |
--assert-working-epoch | --assert-long-filenames | --assert-multi-conrep。
选项:
--admindir=<目录> 使用 <目录> 而非 /var/lib/dpkg。
--root=<目录> 安装到另一个根文件系统。
--instdir=<目录> 改变安装的根目录的同时保持管理(admin)目录不变。
-O|--selected-only 忽略没有被选中安装或升级的软件包。
-E|--skip-same-version 忽略版本与已安装软件版本相同的软件包。
-G|--refuse-downgrade 忽略版本早于已安装软件版本的的软件包。
-B|--auto-deconfigure 就算会影响其他软件包,也要安装。
--[no-]triggers 跳过或强制随之发生的触发器处理。
–no-debsig 不去试图验证软件包的签名。
–no-act|–dry-run|–simulate
仅仅报告我们要执行的操作 - 但是不执行。
-D|–debug=<八进制数字> 开启调试功能(参见 -Dhelp 或者 –debug=help)。
–status-fd 发送状态改变的更新信号到文件描述符。
–log=<文件名> 把状态的更动和操作信息记录到 <文件名>。
–ignore-depends=<软件包名>,…
忽略关于 <软件包名> 的所有依赖关系。
–force-… 忽视遇到的问题(参见 –force-help)。
–no-force-…|–refuse-…
当遇到问题时中止运行。
–abort-after 遇到个错误后终止。
可供–compare-version 使用的比较运算符有:
lt le eq ne ge gt (如果版本号为空,那么就认为它先于任意版本号);
lt-nl le-nl ge-nl gt-nl (如果版本号为空,那么就认为它后于任意版本号);
< << <= = >= >> > (仅仅是为了与主控文件的语法兼容)。