从.so文件中删除路径,以便RPM check-buildroot成功

时间:2018-10-11 17:44:14

标签: linux pip shared-libraries rpmbuild

我将一些Python库打包为RPM。有些库仅作为源分发版提供(没有轮子)。

在我的RPM规范中,我这样做:

pip install --root=%{buildroot} --prefix=/x/y tornado

rpmbuild完成后,它将运行check-buildroot,并且构建失败并显示以下错误:

  

二进制文件/a/b/c/BUILDROOT/my-rpm-1.0.0-1.el7.x86_64/x/y/lib64/python2.7/site-packages/tornado/speedups.so匹配

如果运行%{buildroot},我会看到列出的strings tornado.so | grep BUILDROOT路径。

如何清理.so文件?或更笼统地说,如何使check-buildroot通过?

1 个答案:

答案 0 :(得分:0)

我想出了如何从SO文件中删除路径。

我使用以下命令确定路径是嵌入式调试信息:

readelf --debug-dump=line speedups.so | less

strip命令可以从SO文件中删除调试信息,因此我将其添加到了RPM规范中:

BuildRequires: binutils

set +e
find "%{buildroot}{%_prefix}/lib64/python2.7/site-packages" -type f -name "*.so" | while read so_file
do
    strip --strip-debug "$so_file"
done
set -e

注意:strip在某些SO文件上存在段错误,目前尚不清楚原因。我使用set +e禁用了立即退出功能,因此构建程序将忽略它们。