CentOS rpm包依赖于使用cmake构建的库“soname”

pxy2qtax  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(177)

我正在尝试使用cmake构建一个rpm包。这个包构建了一个库并很好地打包了它。一切都很好
在下一次迭代中,我将使用以下命令添加“soname

set_property(TARGET ${MY_TARGET} PROPERTY VERSION "${SO_VERSION_STRING}")
set_property(TARGET ${MY_TARGET} PROPERTY SOVERSION "${MAJOR_STRING}")

我使用以下方法安装(在打包到rpm之前,我们需要安装)它:

install ( DIRECTORY <PATH_WHERE_LIBS_ARE> DESTINATION <PATH_WHERE_IT_NEEDS_TO_RESIDE>  FILES_MATCHING PATTERN "libABC.so*" )

当rpm在Ubuntu上编译时,它不会显示任何依赖关系

rpm -qpR my-package-x.yy.zz.pppp.x86_64.rpm
 /bin/sh
 /bin/sh
 rpmlib(CompressedFileNames) <= 3.0.4-1
 rpmlib(FileDigests) <= 4.6.0-1
 rpmlib(PayloadFilesHavePrefix) <= 4.0-1

当它在CentOS上编译时,它添加了一个依赖项:

rpm -qpR my-package-x.yy.zz.pppp.x86_64.rpm
 /bin/sh
 /bin/sh
 /bin/sh
 /bin/sh
 /bin/sh
 /bin/sh
 libABC.so.1()(64bit)
 rpmlib(CompressedFileNames) <= 3.0.4-1
 rpmlib(FileDigests) <= 4.6.0-1
 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
 rpmlib(PayloadIsXz) <= 5.2-1

问题是,CentOS为什么要将***libABC.so.1()(64位)***添加为依赖项?
还有,为什么只有“soname”才会出现这个问题。当soname没有添加/打包时就没有问题了。
我试着做了大量的搜索/调查,但找不出确切的原因。这个问题:
"Missing" lib for rpm install when it is present in rpm file
描述了与我相同的问题,没有使用cmake(使用rpm的普通规范文件),但没有解决方案。我试图检查是否有一些问题的架构(x32,x64)讨论,但它似乎都很好。

bksxznpy

bksxznpy1#

当RPM构建软件包时,它会自动扫描所有已安装的文件,并创建一个由软件包提供的内容(例如,可执行文件、库)列表,以及所需的依赖项(例如,共享库、系统功能)。
其思想是,工具(如rpmbuild)可以自动识别至少一些程序依赖项,因此它们应该自动将它们添加为包依赖项。
库有点滑稽,因为它们被视为依赖项和RPM包提供的特性。
AFAIK,一个如此版本,专门启用了这个特性,因为它向RPM的依赖项查找器发出信号,表明这是一个其他人可能想要使用的格式良好的库。
您可以执行以下几项操作:

  • 假设这个包实际上包含了一个libABC.so.1,并且libABC.so.1()(64bit)被列在这个包的提供者中,就这样吧?这使得其他程序最终更容易依赖这个库。
  • 如果你不喜欢这种行为,你可以禁用整个功能。使用AutoReq: no

相关问题