12

我有一个使用 rpmbuild 构建的 rpm。可以说它是sample.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 不能安装 sample.rpm (它到底在哪里寻找依赖关系)?是否需要在构建 rpm 时指定?

4

1 回答 1

12

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 将继续显示依赖错误,除非您libx1.so从“Requires:”行中删除。

要禁用依赖项的自动检测,您可以将其添加到您的.spec文件中:

AutoReqProv: no

更多信息位于rpm.orgrpm5.org

于 2012-07-13T03:17:47.010 回答