rpm打包:使用rpm安装的文件,但其他需要它的rpm找不到

rpm打包:使用rpm安装的文件,但其他需要它的rpm找不到,rpm,specifications,rpmbuild,Rpm,Specifications,Rpmbuild,问题:我的rpm软件包安装以下内容,但在其他软件包将其用作依赖项时找不到它: sudo rpm -qlp libjaeger-16.0.0-3641.g0b61b1fc.el8.x86_64.rpm /usr/lib64/libjaegertracing.so.0 /usr/lib64/libjaegertracing.so.0.6.1 /usr/lib64/libopentracing.so.1 /usr/lib64/libopentracing.so.1.6.0 /usr/lib64/li

问题:我的rpm软件包安装以下内容,但在其他软件包将其用作依赖项时找不到它:

sudo rpm -qlp libjaeger-16.0.0-3641.g0b61b1fc.el8.x86_64.rpm

/usr/lib64/libjaegertracing.so.0
/usr/lib64/libjaegertracing.so.0.6.1
/usr/lib64/libopentracing.so.1
/usr/lib64/libopentracing.so.1.6.0
/usr/lib64/libthrift.so.0.13.0
对于在Requires字段中提到此包的rpm包,它确实指定了您需要的共享LIB:

Error: 
 Problem 1: conflicting requests
  - nothing provides libjaegertracing.so.0()(64bit) needed by ceph-common-2:16.0.0-3642.g90dc7b19.el8.x86_64
  - nothing provides libopentracing.so.1()(64bit) needed by ceph-common-2:16.0.0-3642.g90dc7b19.el8.x86_64
  - nothing provides libthrift.so.0.13.0()(64bit) needed by ceph-common-2:16.0.0-3642.g90dc7b19.el8.x86_64
但正如您所看到的,即使在了解了所需rpm提供的文件之后,它也无法解析这些文件的位置

注意事项和检查我做了:

  • 在同一平台上构建(64位)
  • 在虚拟规范文件中进行实验性检查>>可以很好地与
    rpm配合使用--提供了
    还列出了共享lib
  • 但是当我对主源代码执行相同的操作时 我看不到提供的共享LIB:

    ❯ sudo rpm -q --provides libjaeger-16.0.0-3641.g0b61b1fc.el8.x86_64.rpm
    
    libjaeger = 2:16.0.0-3641.g0b61b1fc.el8
    libjaeger(x86-64) = 2:16.0.0-3641.g0b61b1fc.el8
    
    如何确保rpm能够解析并找到这些共享库

    规范文件的相关部分:

    %if %{with jaeger}
    %files -n libjaeger
    #will have to change with find_package method
    %{_libdir}/libopentracing.so.*
    %{_libdir}/libthrift.so.*
    %{_libdir}/libjaegertracing.so.*
    
    %post -n libjaeger -p /sbin/ldconfig
    %postun -n libjaeger -p /sbin/ldconfig
    
    %files -n libjaeger-devel
    %{_includedir}/thrift
    %{_includedir}/jaegertracing
    %{_includedir}/opentracing
    %{_libdir}/libopentracing.so
    %{_libdir}/libthrift.so
    %{_libdir}/libjaegertracing.so
    %endif
    
    
    
     %package -n libjaeger
        Summary:    Ceph distributed file system client library
        %if 0%{?suse_version}
        Group:      System/Libraries
        %endif
        Obsoletes:  libjaeger < %{_epoch_prefix}%{version}-%{release}
        %description -n libjaeger
        Ceph is a distributed network file system designed to provide excellent
        performance, reliability, and scalability.
    
    %if%{with jaeger}
    %文件-n libjaeger
    #必须使用find_包方法进行更改
    %{{u libdir}/libopentracing.so*
    %{{u libdir}/libthrift.so*
    %{{u libdir}/libjaegertracing.so*
    %post-n libjaeger-p/sbin/ldconfig
    %poston-n libjaeger-p/sbin/ldconfig
    %文件-n libjaeger-devel
    %{{u includedir}/节俭
    %{u includedir}/jaegertracing
    %{u includedir}/opentracing
    %{u libdir}/libopentracing.so
    %{u libdir}/libthrift.so
    %{{u libdir}/libjaegertracing.so
    %恩迪夫
    %包装-n libjaeger
    概要:Ceph分布式文件系统客户端库
    %如果0%{?suse_version}
    组:系统/库
    %恩迪夫
    过时:libjaeger<%{epoch_prefix}%{version}-%{release}
    %description-n libjaeger
    Ceph是一个分布式网络文件系统,旨在提供出色的性能
    性能、可靠性和可扩展性。
    
    您可能禁用了自动提供。见:

    您必须通过使用
    AutoReqProv
    删除行来再次启用它,或者在规范中显式写入它:

      Provides: libjaegertracing.so.0()(64bit)
      Provides: libopentracing.so.1()(64bit)
    

    第一个是首选的,因为第二个很难维护。

    是的,明确的规范确实有助于解决冲突,但我没有禁用
    AutoReqProv
    ,这是我不理解的,可能需要使用find provides脚本进行一些挖掘(因为find requires似乎可以正确地解决问题),谢谢!
      Provides: libjaegertracing.so.0()(64bit)
      Provides: libopentracing.so.1()(64bit)