【问题标题】:RPM Missing dependencyRPM 缺少依赖项
【发布时间】:2017-07-05 11:54:29
【问题描述】:

我正在创建一个包含以下共享对象的 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

当我尝试安装 rpm 时,它会给出错误 "Missing dependency: libexample.so",即使它被打包为指向 libexample.so.1.0.1 的链接文件

所以问题在于 RPM 没有考虑到我正在打包 libexample.so(这是指向 libexample.so.1.0.1 的链接)

但是,我使用--nodeps 选项安装了 rpm,一切正常。

所以,我的问题是我应该如何修改以避免出现缺少依赖项的错误。

为了验证缺少依赖项是由于链接文件引起的,我将 libexample.so 从链接文件更改为实际共享对象 (cp libexample.so.1.0.1 libexample.so),并且 rpm 没有给出缺少依赖项的错误。

请有人帮忙告诉我我缺少什么以及如何修复 RPM 中缺少的依赖项错误。非常感谢您的帮助和时间。

【问题讨论】:

  • 规范文件没有什么花哨的。除文件外,所有部分都是空的。在 %files 部分,它指向包含所有要打包的文件的目录。 (例如 %atrib ... /a/b/c -- 所有要打包的文件都在 /a/b/c 下;包括共享库。)
  • 要么你使用了错误的术语“provides”和“requires”(它们在 rpm 上下文中具有特殊含义),要么你正在做一些非常可疑的事情。无论如何,发布您的规范文件。

标签: dependencies rpm


【解决方案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

【讨论】:

  • 谢谢。由于某些 .so 中缺少 SONAME,问题就出现了。 RPM 使用 SONAME 来构建依赖关系。谢谢你的回答。
【解决方案2】:

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

my blog post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 2020-01-03
    • 2017-12-25
    • 2015-04-18
    • 2020-03-24
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多