主链接共享库是一个符号链接?

时间:2016-01-22 19:46:41

标签: rpm rpmbuild

我正在尝试使用tarball从源代码构建libxvidcore并使用RPM specfile provided in RPMFusion。我有理由重新包装这个。

%global _hardened_build 1
# can't seem to find debug info for now
%global debug_package %{nil}

%define package_name libxvidcore
%define package_version 1.3.4
%define package_release 1

Name: %{package_name}
Summary: A video decoder and encoder library aimed at providing the best compression efficiency and picture quality possible.
Version: %{package_version}
Release: %{package_release}%{?dist}
License: GPL
Source: http://downloads.xvid.org/downloads/xvidcore-%{package_version}.tar.bz2

%ifarch %{ix86} x86_64
BuildRequires: nasm
%endif

%description
A video decoder and encoder library aimed at providing the best compression efficiency and picture quality possible.

%prep

%setup -n xvidcore

%build
cd build/generic
%configure

make %{?_smp_mflags}

%install
make -C build/generic install DESTDIR=$RPM_BUILD_ROOT

%files
%{_libdir}/libxvidcore.so.4
%{_libdir}/libxvidcore.so.4.3

%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig

%package devel
Summary: libxvidcore-devel
Requires: libxvidcore = %{package_version}
%description devel
libxvidcore-devel
%files devel
%{_includedir}/xvid.h
%{_libdir}/libxvidcore.so
%exclude %{_libdir}/libxvidcore.a

共享库发生了一件非常奇怪的事情。 libxvidcore提供的文件是:

/usr/lib64/libxvidcore.so.4 -> /usr/lib64/libxvidcore.so.4.3
/usr/lib64/libxvidcore.so.4.3

libxvidcore-devel包取决于libxvidcore。但是,由于以下错误,我无法安装libxvidcore-devel

$ sudo rpm -ivh RPMS/x86_64/libxvidcore-1.3.4-1.fc23.x86_64.rpm \
                RPMS/x86_64/libxvidcore-devel-1.3.4-1.fc23.x86_64.rpm
error: Failed dependencies:
    libxvidcore.so.4()(64bit) is needed by libxvidcore-devel-1.3.4-1.fc23.x86_64

如上所述,此共享库(libxvidcore.so.4)是libxvidcore.so.4.3的符号链接,它是真正的ELF共享库。由于我没有定义这个版本如何运行,我不知道如何解决这个问题。

这是包的布局:

$ rpm -qp --provides --fileprovide RPMS/x86_64/libxvidcore-1.3.4-1.fc23.x86_64.rpm
libxvidcore = 1.3.4-1.fc23
libxvidcore(x86-64) = 1.3.4-1.fc23
/usr/lib64/libxvidcore.so.4
/usr/lib64/libxvidcore.so.4.3
$ rpm -qp --provides --fileprovide RPMS/x86_64/libxvidcore-devel-1.3.4-1.fc23.x86_64.rpm
libxvidcore-devel = 1.3.4-1.fc23
libxvidcore-devel(x86-64) = 1.3.4-1.fc23
/usr/include/xvid.h
/usr/lib64/libxvidcore.so

为了理智,这里是file报告的共享库信息:

$ file /usr/lib64/libxvidcore.so.4{,.3}
/usr/lib64/libxvidcore.so.4:   symbolic link to libxvidcore.so.4.3
/usr/lib64/libxvidcore.so.4.3: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=86c2c379f2ca0dc2f3d3f1306c55de29b1d76738, not stripped

以下是libxvidcore软件包的更多信息:

$ rpm -qi --qf 'Arch : %{arch}\n' --provides libxvidcore
Name        : libxvidcore
Version     : 1.3.4
Release     : 1.fc23
Architecture: x86_64
Install Date: Mon 25 Jan 2016 01:28:08 AM UTC
Group       : Unspecified
Size        : 2697952
License     : GPL
Signature   : (none)
Source RPM  : libxvidcore-1.3.4-1.fc23.src.rpm
Build Date  : Mon 25 Jan 2016 01:27:50 AM UTC
Build Host  : fedora23
Relocations : (not relocatable)
Summary     : A video decoder and encoder library aimed at providing the best compression efficiency and picture quality possible.
Description :
A video decoder and encoder library aimed at providing the best compression efficiency and picture quality possible.
Arch : x86_64
libxvidcore = 1.3.4-1.fc23
libxvidcore(x86-64) = 1.3.4-1.fc23

我有办法正确处理奇怪的符号链接吗?

2 个答案:

答案 0 :(得分:1)

问题是rpm是“聪明的”。它仅在rpmbuild进程期间扫描具有库提供的执行权限的库。

由于某种原因,xvidcore构建被破坏(在这方面)并且没有安装具有执行权限的库。

修复此问题(正如我在chmod部分调用%install进行的快速测试中所做的那样,但您应该寻找更好的解决方案)并且您获得了libxvidcore.so.4()(64bit) --requires按预期输出。

我不知道为什么构建本身不会这样做;我认为应该是。

答案 1 :(得分:-1)

首先总结一下库'base'包的习惯组织和相应的库'base'-devel包可能会有所帮助:

rpm -i <base> <base>-devel

因为链接库是SONAME库的符号链接,所以'base'-devel包需要'base'包是一个自然的结果。我认为你的libxvidcore-devel包的行为符合预期。当两个包都在Yum存储库中并且请求'base'-devel包时,Yum将解析这些要求并安装它们。

对于开发工作,如果您直接使用'rpm'命令来安装软件包,则只​​需在安装命令中指定两者:

$ paste -s -d '' infile
1234
$ paste -s -d ' ' infile
1 2 3 4

希望这有帮助。