我正在尝试使用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
我有办法正确处理奇怪的符号链接吗?
答案 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
希望这有帮助。