【问题标题】:How to package shared library in deb packages如何在 deb 包中打包共享库
【发布时间】:2013-01-07 07:45:16
【问题描述】:
我的应用程序使用了一些私有共享库,我需要将其与二进制文件一起打包,并且按照 Debian 政策规则
建议支持文件和运行时支持程序
不需要用户手动调用,但仍然
包运行所需的,放置(如果它们是二进制的)
在 /usr/lib 的子目录中,最好在 /usr/lib/package-name 下。
所以,我把我的共享库,例如libabc.so 在 /usr/lib/myapp/ 目录中。创建 debian 包后,二进制文件无法加载,因为加载程序未搜索 /usr/lib/myapp/ 以加载目录。他们不建议在二进制文件中使用 RPATH。那么我应该在 debian 包中进行哪些更改,或者在二进制文件的编译或其他任何内容中进行哪些更改才能使其正常工作。
【问题讨论】:
标签:
linux
package
debian
shared-libraries
【解决方案1】:
如果您的共享库对其他(可能在未来的)应用程序有任何用途,并且该库有一个公共接口,您可以考虑将其直接安装到 /usr/lib/(或者更确切地说是 /usr/lib/<host-triplet> 以获得多架构支持) .
如果这不是一个选项(因为您的共享库确实是私有的),请检查其他应用程序如何处理它。对我系统的快速调查显示ardour 和gedit 在/usr/lib/<pkgname>/ 中都有私有shlib。
热情
ardour 使用(imo)相当老套的方式:可执行文件 /usr/bin/ardour2 实际上只是一个 shellscript,它使用一些 LD_LIBRARY_PATH 软糖来扭曲调用真正的二进制文件:
export LD_LIBRARY_PATH=/usr/lib/ardour2${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
/usr/lib/ardour2/ardour-bin
gedit
使用gedit,上游已正确转移到将libgedit-private.so 安装为pkglib(用于/usr/lib/<pkgname> 的库的自动工具术语)。
autotools 自动处理解析(可能使用类似rpath 的东西)。
最后,当我阅读 debian-policy 时,rpath 对于 非私有 库(可能被其他应用程序使用的库)是不受欢迎的。我不认为这是一个问题,但当然这是我对政策的解释。您可能想查看其中一个 Debian 频道,例如他们的 IRC 或一些邮件列表。