【问题标题】:Locate parent of missing dependency in rpm package在 rpm 包中找到缺少依赖项的父项
【发布时间】:2015-12-14 13:18:05
【问题描述】:

我已经构建了一个 RPM 包来保存我的应用程序,但尝试安装它会产生一个关于缺少 faad 库的错误:

rpm --install dvstor-8.0-0.i386.rpm
error: Failed dependencies:
    libfaad.so.0 is needed by dvstor-8.0-0.i386

(实际上已经安装了 libfaad.so.2)。

所以我的一个二进制文件链接到了错误的版本...如何找出哪个?

rpm 包本身有 600 个文件,rpm -qpR dvstor-8.0-0.i386.rpm 列出了 60 个不同的依赖项,包括我自己的几个共享库和许多系统库。

除了在所有这些文件上运行 ldd <file> | grep libfaad 之外,还有没有更简单的方法可以找到必须重新链接的文件?

我检查了应用程序二进制文件及其直接共享库,但没有任何乐趣。必须在另一个文件中引用...

编辑 1 参考这里是 rpmbuild 的输出。注意中间的 libfaad.so.0。里面有什么提示吗?

Processing files: dvstor-core-8.0-2.i386
Provides: libdvscfg.so.8 libdvsfileactions.so.8 libdvstc.so.8
          libdvsutils.so.8 libvlcplugin.so
Requires(interp): /bin/sh /bin/sh /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 
    rpmlib(FileDigests) <= 4.6.0-1 
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(pre): /bin/sh
Requires(post): /bin/sh
Requires(postun): /bin/sh
Requires: /bin/bash /bin/sh /usr/bin/perl libACE.so.5.5.0 libICE.so.6 libSM.so.6
   libX11.so.6 libXt.so.6 libagent++.so libavcodec.so libavcodec.so.57
   libavcodec.so.57(LIBAVCODEC_57) libavformat.so libavformat.so.57 libavutil.so 
   libavutil.so.55 libavutil.so.55(LIBAVUTIL_55) libc.so.6 libc.so.6(GLIBC_2.0)
   libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.1.2) libc.so.6(GLIBC_2.1.3) libc.so.6(GLIBC_2.2)
   libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.3.3) libc.so.6(GLIBC_2.3.4) libcrypto.so.10
   libdl.so.2 libdl.so.2(GLIBC_2.0) libdl.so.2(GLIBC_2.1) 
   libdvscfg.so.8 libdvsfileactions.so.8 libdvstc.so.8 libdvsutils.so.8 libfaac.so.0 
   libfaad.so.0 libfreeimage.so.3 libgcc_s.so.1 libgcc_s.so.1(GCC_3.0) libgcc_s.so.1(GCC_3.4)
   libgcc_s.so.1(GLIBC_2.0) libgsm.so.1 libm.so.6 libm.so.6(GLIBC_2.0) libm.so.6(GLIBC_2.1)
   libmcstdh264dec.so.7 libmp3lame.so.0 libncurses.so.5 libnspr4.so libogg.so.0
   libpcap.so.1 libplc4.so libplds4.so libpthread.so.0 libpthread.so.0(GLIBC_2.0)
   libpthread.so.0(GLIBC_2.1) libpthread.so.0(GLIBC_2.2) libpthread.so.0(GLIBC_2.3.2)
   libpthread.so.0(GLIBC_2.3.4) librt.so.1 libsnmp++.so libsnmp.so.20 libstdc++.so.6
   libstdc++.so.6(CXXABI_1.3) libstdc++.so.6(GLIBCXX_3.4) libstdc++.so.6(GLIBCXX_3.4.4)
   libswresample.so.2 libswscale.so.4 libswscale.so.4(LIBSWSCALE_4) libtheora.so.0 
   libtinfo.so.5 libvorbis.so.0

【问题讨论】:

    标签: rpm rpmbuild


    【解决方案1】:

    如果您自己构建 RPM,您可以使用自己的一个覆盖 prereq 扫描脚本,然后当它看到您正在寻找的神奇脚本时打印出来。

    在我的机器上,我会开始挖掘/lib/rpm/redhat/find-requires

    【讨论】:

    • 这是一个非常好的线索。谢谢。但是,我已经深入研究了它。在这台 Centos 6 机器上,/usr/lib/rpm 和 /usr/lib/rpm/redhat 都有相似的内容。我认为任何一个 find-requires 都不会被执行。我已经从 /usr/lib/rpm 中移出几乎所有内容,而 rpmbuild still 声明需要 libfaad。可以将其硬编码到 rpmbuild 中吗?
    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 2013-10-11
    • 2019-09-22
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多