2013-02-19 43 views
1

我有两个RPMS(lib.rpm和program.rpm),其中一个包含共享库,例如。 libtest.so,libtest.so.1,libtest.so.1.0。另一个包含链接到共享库的单个二进制文件,例如。 test_program。RPM无法从另一个RPM中找到共享库

我在没有问题的新机器上安装了lib.rpm。通过test_program复制并运行良好。然后我生成包含test_program的program.rpm,再次没有问题。但是,当我做一个rpm -ivh program.rpm我得到:

error: Failed dependencies: 
    libtest.so.1() (64bit) is needed by test_program-0.1-1.x86_64 

然而,在test_program做LDD时,它清楚地找到该文件在/usr/lib64/libtest.so.1。

我的规格文件都是最低限度。除包描述外,我只在%files下添加了一个条目,AutoReqProv设置为no。

那么是什么给?

+0

'rpm -q --provides lib_rpm_name'给出了什么? – 2013-02-19 09:46:02

+0

仅仅因为'ldd'看到它,并不意味着RPM数据库知道它。 'rpm -qlp lib.rpm'会显示'lib' RPM正在安装的文件(RPM知道)。例如,如果你正在做一些事情来产生或链接'%post'中的'libtest.so.1',你就错了。 – 2013-02-19 09:51:02

+0

'rpm -q --provides lib.rpm'given'test = 1.0.0-1'。 rpm -qlp lib.rpm提供'/usr/lib64/libtest.so /usr/lib64/libtest.so.1/usr/lib64/libtest.so.1.0'。 – Nghia 2013-02-20 00:11:19

回答

1

pastebin_link你给我注意到

AutoReqProv: no 

我认为,导致未填充的rpm的Provides数据 - 因为这对文件不进入RPM数据库中的信息。

该解决方案可能会删除AutoReqProv或将其设置为yes

编辑:根据Nghia酒店的评论没有帮助:

不知道为什么你需要这个,但如果你真的这样做,提明确

Provides: /usr/lib64/libtest.so /usr/lib64/libtest.so.1 /usr/lib64/libtest.so.1.0 

会可能解决你的问题。

+0

设置为AutoReqProv:是的作品!但是,将其设置为“否”并使用提供程序(如您所建议的)不起作用。该手册说“提供”指定了“能力”。我很想知道使用“AutoReqProv:no”的工作解决方案。 – Nghia 2013-02-21 23:53:22

+0

如果你真的*真的*知道你在做什么,请关闭“AutoReqProv”。你为什么认为你需要解除它? – 2013-02-22 01:37:32

+0

我正在使用以前项目的复制和粘贴spec文件。我不知道AutoReqProv:是常态。现在我明白了。 – Nghia 2013-02-25 00:03:46