我有一个使用 rpmbuild 构建的 rpm。假设它是样本.rpm。它已成功构建。rpm 具有和可执行文件(我们称之为 init(。
当我尝试使用rpm -ivh sample.rpm
安装它时,它向我显示失败的依赖项。
假设错误是Failed dependency for: example.so
这意味着 rpm 无法找到此共享对象文件。(即使 so 文件存在于同一个目录中(。
因此,我将rpm安装为rpm -ivh sample.rpm --nodeps
(因为我知道我有所需的SO文件(。
那么为什么 rpm 无法安装这些 rpm?它在哪里查找目标文件?(Linux 加载器是否查找这些 .so(。我必须LD_LIBRARY_PATH包含这些 .so 的路径,因此当我从它运行的 rpm 运行已安装的文件 (init( 时。
那为什么rpm不能安装示例.rpm(它究竟在哪里寻找依赖项(?在构建 rpm 时是否需要指定?
RPM 文件的依赖关系在其.spec
文件中的"Requires:"行中指定。
示例 SPEC 文件:
Summary: <Summary for my Linux project>
Name: <Name for my Linux project>
Version: 2.5.1
Release: GA
Requires: libx1.so >= 2.6.3
BuildArch: i586
Group: System / Applications
License: GPL 2.0
Vendor: <my organization>
您还可以运行以下命令来确定需要哪些依赖项:
$ rpm -q --requires <my_rpm>
libx1.so.2
$
依赖libx1.so
本身应该通过 RPM 安装,以便将其存在输入到 RedHat 软件包管理器维护的数据库中。换句话说,文件系统上libx1.so
的物理存在不是依赖性测试的标准。
若要找出哪个包提供依赖项,请运行以下命令:
$ rpm -q --whatprovides libx1
如果没有软件包提供libx1.so
,您的 RPM 将继续显示依赖错误,除非您从"Requires:"行中删除libx1.so
。
要禁用依赖项的自动检测,可以将其添加到.spec
文件中:
AutoReqProv: no
更多信息在 rpm.org 和 rpm5.org。