rpm在哪里查找依赖项?

时间:2012-07-10 17:36:46

标签: dependencies rpm

我有一个使用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无法安装这些rpms呢? 它在哪里寻找目标文件? (linux加载器是否会查找这些.so)。我有LD_LIBRARY_PATH来包含这些.so的路径,所以当我从它运行的rpm运行已安装的文件(init)时。

那么为什么rpm无法安装sample.rpm(它究竟在哪里查找依赖项)? 它是否需要在构建rpm时指定?

1 个答案:

答案 0 :(得分:10)

RPM文件的依赖关系在"上的.spec文件中指定:要求:"线。

示例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将继续显示依赖性错误,除非您从&#34;要求:&#34;删除libx1.so线。

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

AutoReqProv: no

更多信息位于rpm.orgrpm5.org