2012-10-09 184 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