2012-10-09 128 views
1

我创建,其具有以下共享对象RPM:RPM缺少依赖

libexample.so --> libexample.so.1.0.1 
libexample.so.1.0.1 

当我创建使用rpmbuild的RPM,我看到的rpm提供libexample.so.1.0.1。 但是,在需要部分我看到libexample.so

在项目的makefile我指libexample.so

当我试图安装它给出了一个错误"Missing dependency: libexample.so"即使它被打包为一个链接文件指向的rpm到libexample.so.1.0.1

所以问题是某种RPM没有考虑到我的包装libexample.so(这是一个链接到libexample.so.1.0.1

不过,我装转速使用--nodeps选项,一切工作正常。

所以,我的问题是我应该如何修改以避免错误的依赖关系。

为了验证缺少的依赖关系是由于链接文件引起的,我将libexample.so从链接文件更改为实际共享对象(cp libexample.so.1.0.1 libexample.so),并且rpm不会提供缺少的依赖关系错误。

有人可以帮助告诉我我缺少什么,以及如何解决这个在RPM中缺少的依赖关系错误。提前感谢您的帮助和时间。

+0

分享规格文件? –

+0

spec文件没有什么奇特的。除文件外,所有部分都是空的。在%files部分,它指向包含所有文件的目录。 (例如,%atrib .../a/b/c - 要打包的所有文件位于/ a/b/c下;包括共享库。) – Bill

+0

要么使用术语“提供”和“要求”错误(在rpm环境中有特殊含义),或者你正在做一些非常可怕的事情。无论如何,发布你的spec文件。 – drahnr

回答

1

尝试运行

rpm -q --requires _your_rpm_name_ 

而且看它是否返回任何东西从你期待什么不同。我怀疑自动依赖脚本可能会将依赖关系设置为您所期望的以外的内容。您可以通过添加标签下面的规范文件,然后手动呼唤你需要的包禁用自动依赖关系:

AutoReqProv: no 
Requires: _rpm_providing_libexample.so_ 

http://ftp.rpm.org/max-rpm/s1-rpm-depend-auto-depend.htmlhttp://ftp.rpm.org/max-rpm/s1-rpm-depend-manual-dependencies.html

+1

谢谢。由于在某些.so中丢失了SONAME,问题就出现了。 RPM使用SONAME来构建依赖关系。感谢您的回答。 – Bill

0

我不是专家,但我认为问题是RPM不知道sonames。如果RPM文件具有依赖性,它将检查RPM系统。

参见my blog post