【问题标题】:RPM can't find shared library from another RPMRPM 无法从另一个 RPM 中找到共享库
【发布时间】:2013-02-28 18:35:42
【问题描述】:

我制作了两个 RPMS(lib.rpm 和 program.rpm),一个包含共享库,例如。 libtest.so、libtest.so.1、libtest.so.1.0。另一个包含链接到共享库的单个二进制文件,例如。测试程序。

我在没有问题的新机器上安装了 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。

那是什么?

【问题讨论】:

  • 'rpm -q --provides lib_rpm_name' 有什么作用?
  • ldd 看到它并不意味着 RPM 数据库知道它。 rpm -qlp lib.rpm 将显示lib RPM 正在安装的文件(RPM 知道)。例如,如果你正在做一些事情来生成或链接libtest.so.1%post,那么你做错了。
  • 'rpm -q --provides lib.rpm' 给出test = 1.0.0-1。 rpm -qlp lib.rpm 给出/usr/lib64/libtest.so /usr/lib64/libtest.so.1 /usr/lib64/libtest.so.1.0
  • 您可以尝试在您的 program.rpm 规范中添加“Requires: lib.rpm”以查看会发生什么吗?
  • @Nghia lib 编译的是 64 位还是 32 位?您的应用似乎在寻找 64 位,但 rpm 似乎提供 32 位

标签: shared-libraries rpm


【解决方案1】:

在你给的pastebin_link我注意到了

AutoReqProv: no

我认为这会导致未填充 rpm 的 Provides 数据 - 因此有关文件的信息不会进入 rpm 数据库。

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

编辑: 根据 Nghia 的 cmets 并没有帮助:

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

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

可能会解决你的问题。

【讨论】:

  • 设置为 AutoReqProv:可以!但是按照您的建议,将其设置为“否”并使用提供是行不通的。手册说“提供”指定了“能力”。我很想知道使用“AutoReqProv: no”的可行解决方案。
  • 只有在你真的、真的知道你在做什么的情况下才关闭“AutoReqProv”。为什么您认为需要取消设置?
  • 我使用的是以前项目中的复制和粘贴规范文件。我不知道 AutoReqProv:是的,这是常态。现在我知道了。
猜你喜欢
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2012-12-15
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
相关资源
最近更新 更多