我尝试制作链接到此类库的程序包(来自 ldd 的输出):
libwx_baseu-2.8.so.0 => /usr/lib64/wx-2.8-wxcontainer/libwx_baseu-2.8.so.0
很简单,对吧?但是当我将该程序打包(使用 rpmbuild)然后尝试安装它时,rpm 抱怨缺少库(上面的这个):
错误:依赖失败:
libwx_baseu-2.8.so.0()(64bit) libwx_baseu-2.8.so.0(WXU_2.8)(64bit)
我的猜测是,rpmbuild 设置了主 lib 目录的依赖关系,即 /usr/lib64。
问题-- 如何解决这个问题(好吧,一个会被强制安装,但我想避免它)?即如何构建 rpm 以便为 wx-2.8-wxcontainer 子目录(对于此库)设置依赖项?
openSUSE 11.4,如果这很重要的话。
编辑
我可以使用 --nodeps 来安装这样的软件包,这会强制安装,然后安装程序就可以完美运行。很明显,是 rpm 或 rpmbuild 有问题,而不是系统本身。
答案1
我认为这是当前 rpm/rpmbuild 版本中的限制或错误。我报告了这个问题,所以我认为在某种程度上问题得到了回答:
https://bugzilla.novell.com/show_bug.cgi?id=697943
你总是必须成对安装 wx rpm — 一个带有真正的库,另一个包只简单地说“库已安装”。
- libwx_baseu_net-2_8-0-wxcontainer-2.8.12-3.1.x86_64
- libwx_baseu_net-2_8-0-兼容库-wxcontainer-2.8.12-3.1.x86_64
如果没有第二个 rpm,包管理器和/或相关应用程序将根本不知道相应的 wx 库是否存在。
答案2
添加一个提供字段写入规范文件头,例如
提供:lib_missing_complaint.so()(64位)
当依赖项以 ../ 开头时,这不起作用
在这种情况下使用
AutoReq: no
答案3
我认为您正在混合文件和包。
该库存在于磁盘上的事实并不意味着它可以用于解决依赖关系。为此,必须有一个提供此库的包。
另一方面,对于依赖性解析,该文件实际上甚至不必存在。事实上,某些已安装的软件包提供它就足够了。