LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 794|回复: 5

[讨论]revdep-rebuild做不了的事情

[复制链接]
发表于 2010-4-8 16:52:53 | 显示全部楼层 |阅读模式
假设,
在系统中只有packageA提供的libA的情况下,安装packageX后libX会链接到libA;
在系统中同时有libA和和packageB提供的libB的情况下,安装packageX后libX会链接到libB。
那么,以如下顺序安装能使libX最终链接到libB么?

  1. emerge packageA
  2. emerge packageX
  3. emerge packageB
  4. revdep-rebuild
复制代码

这样的情况在gentoo中是存在的。xorg-x11包含的包里有20多个没有xcb相关的USE,但在安装时会根据系统中是否已经有了libxcb自动判断是链接到xcb还是其替代者。

如果哪位朋友还没有安装X,按以下顺序安装xorg就能发现这个问题。

  1. USE='xcb' emerge xorg-x11
复制代码

这时系统里有libxcb

  1. USE='-xcb' emerge -avuDN world
  2. emerge -a --depclean
复制代码

这会把libxcb和另外一两个包卸掉
做完这步后系统里是没有libxcb的。

  1. revdep-rebuild
复制代码

有30个左右的包因为没有了xcb相关的共享库被重新emerge。

  1. USE='xcb' emerge -avuDN world
  2. emerge --depclean
  3. revdep-rebuild
复制代码

这次revdep-rebuild没有重新emerge任何包。做完这步后系统里有了libxcb,但最初链接到libxcb并在第一次revdep-rebuild时重新emerge的包现在链接到libxcb的替代品而不是libxcb。

总结。
我的看法是,即使系统的USE状态一样,但链接库的链接状态并不一定一样。revdep-rebuild没有超能力。
发表于 2010-4-8 17:27:56 | 显示全部楼层
为什么要用USE="..." emerge ...这样的办法安装包?这似乎是一个很糟糕的习惯。
revdep-rebuild只适用来检查错误的,以保证软件能够运行。而不是用来检查你认为的“不当”,实现什么超能力的。
你给出的例子里,真正应该责备的是x11-xorg的包里包含的一些包没有提供xcb的USE
回复 支持 反对

使用道具 举报

发表于 2010-4-8 18:23:12 | 显示全部楼层
不太明白
能不能说清楚一个现实中具体的例子
具体到哪个是A,哪个是B,哪个是X
回复 支持 反对

使用道具 举报

发表于 2010-4-8 18:32:26 | 显示全部楼层
确切的说我想知道具体的configure.in里的代码片段

一般来说,不提供./configure配置选项,而仅仅依赖系统里是否有某两个功能差不多的库中间的一个,而决定用那个的话,这种做法我觉得是有问题的

这属于程序本身的构建系统的问题
回复 支持 反对

使用道具 举报

发表于 2010-4-8 18:34:10 | 显示全部楼层
jsun说的也差不多是这个意思

如果程序本身构建系统没问题,而只是ebuild没有提供USE,那就是ebuild的错
回复 支持 反对

使用道具 举报

发表于 2010-4-8 19:06:18 | 显示全部楼层
你是說 circular dependency 問題吧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表