我有一个使用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时指定某些内容?
小智 11
RPM文件的依赖关系在其.spec"Requires:"行的文件中指定.
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>
Run Code Online (Sandbox Code Playgroud)
您还可以运行此命令以确定需要哪些依赖项:
$ rpm -q --requires <my_rpm>
libx1.so.2
$
Run Code Online (Sandbox Code Playgroud)
libx1.so应该通过RPM安装依赖项本身,以便将其存在输入RedHat Package Manager维护的数据库中.换句话说,libx1.so文件系统上的物理存在不是依赖性测试的标准.
要找出哪个包提供依赖项,请运行以下命令:
$ rpm -q --whatprovides libx1
Run Code Online (Sandbox Code Playgroud)
如果没有提供软件包libx1.so,则除非libx1.so从"Requires:"行中删除,否则RPM将继续显示依赖项错误.
要禁用自动检测依赖项,可以将其添加到.spec文件中:
AutoReqProv: no
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23138 次 |
| 最近记录: |