我正在尝试从外部构建的库创建 RPM。
我的规格基本上是这样的:
Name: ace-tao
Version: 6.5.3
Release: 1
Summary: ACE and TAO libraries
License: other
Vendor: My Corp
Group: Applications/Engineering
Packager: My Corp <[email protected]>
Prefix: /usr/local/foo
%description
Contains the ACE and TAO libraries.
%install
mkdir -p %{buildroot}/%{prefix}/lib
cp -f %{_sourcedir}/deps/libACE*.so.%{version} %{buildroot}/%{prefix}/lib/
cp -f %{_sourcedir}/deps/libTAO*.so.2.5.3 %{buildroot}/%{prefix}/lib/
(
cd %{buildroot}/%{prefix}/lib/
for lib in libTAO*.so.2.5.3; do
ln -s $lib ${lib%.3}
ln -s $lib ${lib%.5.3}
ln -s $lib ${lib%.2.5.3}
done
)
%files
%defattr(-,root,root,-)
%{prefix}
TAO库要求存在符号链接libTAO*.so
和libTAO*.so.2
to ,因此需要调用。libTAO*.so.2.5
libTAO*.so.2.5.3
ln
在我用 构建之后rpmbuild -bb ace-tao.spec
,我得到一个文件ace-tao-6.5.3-1.x86_64.rpm
。然而,安装这个会产生警告:
15:16:32,868 WARN packaging: ace-tao-6.5.3-1.x86_64 requires libTAO.so.2.5.3()(64bit)
15:16:32,868 WARN packaging: ace-tao-6.5.3-1.x86_64 requires libTAO_CodecFactory.so.2.5.3()(64bit)
15:16:32,868 WARN packaging: ace-tao-6.5.3-1.x86_64 requires libTAO_10RTable.so.2.5.3()(64bit)
... snip ...
rpm -qRp ace-tao-6.5.3-1.x86_64.rpm
使用确实列表检查包的要求
libTAO.so.2.5.3()(64bit)
libTAO_AnyTypeCode.so.2.5.3()(64bit)
libTAO_CodecFactory.so.2.5.3()(64bit)
... snip ...
但 RPM 不提供它们:
$ rpm --provides -qp ace-tao-6.5.3-1.x86_64.rpm
ace-tao = 6.5.3-1
ace-tao(x86-64) = 6.5.3-1
即使它包含它们:
$ rpm -qlp ace-tao-6.5.3-1.x86_64.rpm | grep TAO
/usr/local/foo/lib/libTAO.so
/usr/local/foo/lib/libTAO.so.2
/usr/local/foo/lib/libTAO.so.2.5
/usr/local/foo/lib/libTAO.so.2.5.3
/usr/local/foo/lib/libTAO_AnyTypeCode.so
/usr/local/foo/lib/libTAO_AnyTypeCode.so.2
/usr/local/foo/lib/libTAO_AnyTypeCode.so.2.5
/usr/local/foo/lib/libTAO_AnyTypeCode.so.2.5.3
/usr/local/foo/lib/libTAO_CodecFactory.so
/usr/local/foo/lib/libTAO_CodecFactory.so.2
/usr/local/foo/lib/libTAO_CodecFactory.so.2.5
/usr/local/foo/lib/libTAO_CodecFactory.so.2.5.3
... snip ...
这是为什么?我需要对 RPM 进行哪些更改才能提供它包含的库?
我使用的是 CentOS 7.9。