我的应用程序使用一些私有(private)共享库,我需要将其与二进制文件一起打包,并按照 Debian 策略规则
It is recommended that supporting files and run-time support programs that do not need to be invoked manually by users, but are nevertheless required for the package to function, be placed (if they are binary) in a subdirectory of /usr/lib, preferably under /usr/lib/package-name.
所以,我把我的共享库例如libabc.so 在/usr/lib/myapp/目录中。创建 debian 软件包后,二进制文件无法加载,因为加载程序未搜索/usr/lib/myapp/来加载该目录。他们不建议在二进制文件中使用RPATH。那么我应该在 debian 软件包、二进制文件编译或其他任何内容中进行哪些更改才能使其正常工作。
最佳答案
如果您的共享库对其他(可能是 future 的)应用程序有任何用处,并且该库有一个公共(public)接口(interface),您可以考虑将其安装到 /usr/lib/
直接(或者更确切地说 /usr/lib/<host-triplet>
用于多架构支持)。
如果这不是一个选项(因为您的共享库实际上是私有(private)的),请检查其他应用程序如何处理它。对我的系统的快速调查显示 ardour
和gedit
在 /usr/lib/<pkgname>/
有私有(private) 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
对于非私有(private)库(可能被其他应用程序使用的库)是不受欢迎的。我不认为这是一个问题,但这当然是我对政策的解释。您可能想查看 Debian channel 之一,例如他们的 IRC 或某些邮件列表。
关于linux - 如何将共享库打包成deb包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14486335/