2013-02-19 88 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