我的RPM中缺少库(但我知道它们在那里)

时间:2018-03-13 18:31:54

标签: rpm rpmbuild lib

我正在尝试在我的VM中安装RPM。我的RPM名为myPackage.rpm,当我尝试安装它时(yum install myPackage.rpm),我收到以下错误:

Error: Package: myPackage.x86_64 (/myPackage)
       Requires: libicudata.so.32()(64bit)
Error: Package: myPackage.x86_64 (/myPackage)
       Requires: libicuuc.so.32()(64bit)
Error: Package: myPackage.x86_64 (/myPackage)
       Requires: libicui18n.so.32()(64bit)

我做了rpm2cpio myPackage.rpm|cpio -idvm从我的rpm中提取所有文件(在/ root / rpms中)。

我找到了libicudata.so *,它显示了以下内容:

/root/rpms/usr/lib64/libicudata.so.32.0
/root/rpms/usr/lib64/libicudata.so.32
/root/rpms/usr/lib64/libicudata.so
/root/rpms/usr/lib/libicudata.so.32.0
/root/rpms/usr/lib/libicudata.so.32
/root/rpms/usr/lib/libicudata.so

/usr/lib64/libicudata.so.32.0
/usr/lib64/libicudata.so.32
/usr/lib64/libicudata.so.50.1.2
/usr/lib64/libicudata.so.50
/usr/lib/libicudata.so.32.0
/usr/lib/libicudata.so.32
/usr/lib/libicudata.so.50.1.2
/usr/lib/libicudata.so.50

/root/rpms/usr/中列出的文件是来自我的rpm的文件,其他文件安装在VM中。

我不确定我做错了什么以及为什么。我是否错误地打包了我的RPM?

2 个答案:

答案 0 :(得分:1)

1)rpm不关心您在文件系统上实际安装的内容。如果你以某种方式放置库,那么rpm不关心。 Rpm只检查rpmdb。

2)依赖项只是字符串。所以如果rpm告诉你它需要libicudata.so.32()(64bit)。然后它不会检查库名为libicudata的64位版本。 Rpm只做最简单的事情。 Rpm检查某个包是否提供此字符串。所以检查你的包裹:

rpm -qp --provides ./foo.rpm

如果它提供此字符串。

rpmbuild具有内置检查功能,可以检测库的存在,然后自动插入提供的内容:

Provides: libicudata.so.32()(64bit)

如果您完全确定rpmbuild不正确,可以手动指定提供。

答案 1 :(得分:0)

我发现了我的错误。在创建RPM之前,ICU的所有库文件都搞砸了。我跑了ldconfig,它给了我类似的错误消息:

ldconfig: /lib/libicudata.so.32 is not a symbolic link

我在构建我的RPM时,应该是符号链接实际上是与他们应该指向的lib 相同的文件。所以,我删除了应该是符号链接的内容,并重新创建了它们。这消除了错误。