2

我的应用程序使用了一些私有共享库,我需要将其与二进制文件一起打包,并根据 Debian 政策规则

建议将不需要用户手动调用但仍然需要软件包才能运行的支持文件和运行时支持程序放置(如果它们是二进制文件)在 /usr/lib 的子目录中,最好在 /usr/lib/package-name 下。

所以,我把我的共享库,例如 libabc.so 放在 /usr/lib/myapp/ 目录中。创建 debian 包后,二进制文件无法加载,因为加载程序未搜索 /usr/lib/myapp/ 以加载目录。他们不建议在二进制文件中使用RPATH 。那么我应该在 debian 包中进行哪些更改,或者在二进制文件或其他任何东西的编译中使其工作。

4

1 回答 1

3

如果您的共享库对其他(可能在未来的)应用程序有任何用途,并且该库有一个公共接口,您可能会考虑将其/usr/lib/直接安装到其中(或者更确切地说/usr/lib/<host-triplet>是为了支持多架构)。

如果这不是一个选项(因为您的共享库确实是私有的),请检查其他应用程序如何处理它。对我的系统的快速调查显示,两者ardour都有gedit私有 shlib /usr/lib/<pkgname>/

热情

ardour使用(imo)相当hackish的方式:可执行文件/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,上游已正确转移到安装libgedit-private.sopkglib(转到 的库的自动工具术语/usr/lib/<pkgname>)。

autotools自动处理解析(大概使用类似的东西rpath)。

最后,当我阅读 debian-policyrpath时,对于非私有库(其他应用程序可能使用的库)不赞成。我不认为这是一个问题,但当然这是我对政策的解释。您可能想查看其中一个 Debian 频道,例如他们的 IRC 或一些邮件列表。

于 2013-01-24T11:22:29.420 回答