【问题标题】:CentOS rpm package depends on lib "soname" which it builds using cmakeCentOS rpm 软件包依赖于它使用 cmake 构建的 lib "soname"
【发布时间】:2021-11-29 10:37:31
【问题描述】:

我正在尝试使用 cmake 构建一个 rpm 包。这个包构建了一个库并将其打包好,一切都是 hunky-dory

在下一次迭代中,我使用以下命令添加“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     

问题是为什么 libABC.so.1()(64bit) 会被 CentOS 添加一个依赖项?

另外,为什么只有“sonames”才会出现这个问题。不添加/打包soname时没有问题。

我尝试进行大量搜索/调查,但无法找到确切原因。 这个问题:

"Missing" lib for rpm install when it is present in rpm file

描述了与我相同的问题,但没有使用 cmake(使用普通规范文件作为 rpm),但没有解决方案。我试图检查那里讨论的架构(x32,x64)是否存在问题,但看起来一切都很好。

【问题讨论】:

  • 你能分享rpm -qp --provides my-package-x.yy.zz.pppp.x86_64.rpm的输出吗?

标签: linux cmake centos libraries


【解决方案1】:

当 RPM 构建包时,它会自动扫描所有已安装的文件并创建一个由包提供的东西(例如,可执行文件、库)的列表,以及所需的依赖项(例如,共享库、系统功能)。

这个想法是工具(如 rpmbuild)可以自动识别至少一些程序依赖项,因此它们应该自动将它们添加为包依赖项。

库有点有趣,因为它们既被视为依赖项又被视为 RPM 包提供的功能。

AFAIK,so-version 启用了这个特性,因为它向 RPM 的依赖查找器发出信号,表明这是一个其他人可能想要使用的格式良好的库。

你可以做几件事:

  • 假设包实际上包含一个libABC.so.1libABC.so.1()(64bit) 列在包的提供中,就这样吧?它使其他程序更容易最终依赖这个库。

  • 如果您根本不喜欢这种行为,您可以禁用整个功能。使用AutoReq: no

【讨论】:

  • 谢谢@omajid。您恰当地解释了导致解决方案的原因。我迟到了评论,因为我昨天自己解决了这个问题。我得到的第一个见解来自 Danny 的评论(stackoverflow.com/questions/27445918/…)。我想确认这个理论,因此我在此链接的帮助下挖掘了更多信息:cmake.org/pipermail/cmake/2011-February/042829.html,我查看了生成的文件并因此得到了解决方案。
  • 对于那些想知道解决方案变化的人。我刚刚为我的名字添加了 755 权限。更准确地说:安装(DIRECTORY DESTINATION FILES_MATCHING PATTERN "libABC.so*" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
猜你喜欢
  • 2020-03-20
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 2015-06-16
  • 2021-02-09
  • 1970-01-01
相关资源
最近更新 更多