CentOS rpm 包依赖于它使用 cmake 构建的 lib "soname"
CentOS rpm package depends on lib "soname" which it builds using cmake
我正在尝试使用 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 构建包时,它会自动扫描所有已安装的文件并创建包提供的内容(例如,可执行文件、库)以及所需的依赖项(例如,共享库、系统功能)的列表).
想法是工具(如 rpmbuild)可以自动识别至少一些程序依赖项,因此它们应该自动将它们添加为包依赖项。
库有点有趣,因为它们既被视为依赖项又被视为 RPM 包提供的功能。
AFAIK,so-version 专门启用此功能,因为它向 RPM 的依赖项查找器发出信号,表明这是其他人可能想要使用的格式良好的库。
您可以做几件事:
假设这个包实际上包含一个libABC.so.1
并且libABC.so.1()(64bit)
列在包的提供中,就这样吧?它使其他程序更容易最终依赖这个库。
如果您根本不喜欢这种行为,您可以禁用整个功能。使用 AutoReq: no
.
我正在尝试使用 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 构建包时,它会自动扫描所有已安装的文件并创建包提供的内容(例如,可执行文件、库)以及所需的依赖项(例如,共享库、系统功能)的列表).
想法是工具(如 rpmbuild)可以自动识别至少一些程序依赖项,因此它们应该自动将它们添加为包依赖项。
库有点有趣,因为它们既被视为依赖项又被视为 RPM 包提供的功能。
AFAIK,so-version 专门启用此功能,因为它向 RPM 的依赖项查找器发出信号,表明这是其他人可能想要使用的格式良好的库。
您可以做几件事:
假设这个包实际上包含一个
libABC.so.1
并且libABC.so.1()(64bit)
列在包的提供中,就这样吧?它使其他程序更容易最终依赖这个库。如果您根本不喜欢这种行为,您可以禁用整个功能。使用
AutoReq: no
.