linux - 如何将共享库打包成deb包

标签 linux package debian shared-libraries

我的应用程序使用一些私有(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)的),请检查其他应用程序如何处理它。对我的系统的快速调查显示 ardourgedit/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.sopkglib (自动工具术语,用于指向 /usr/lib/<pkgname> 的库)。

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

最后,当我阅读 debian-policy 时,rpath对于非私有(private)库(可能被其他应用程序使用的库)是不受欢迎的。我不认为这是一个问题,但这当然是我对政策的解释。您可能想查看 Debian channel 之一,例如他们的 IRC 或某些邮件列表。

关于linux - 如何将共享库打包成deb包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14486335/

相关文章:

linux - "atomic"系统调用是什么意思?

python - 如何为我用于多个不同项目的模块创建本地 Python 包

Haskell base-4.x 包安装

linux - 如何使用 Linux 将 VBS 脚本转换为 .EXE?

linux - BASH Wikitables 获取硬件信息

c - 将 c 应用程序从 Unix 移植到 Linux 时的 Pragmas 行为

php - 我的 ubuntu 机器上缺少 simplexml,但无法下载

c - UNIX 域套接字导致输出延迟

c++ - 升级至Debian 7.5;现在 'memcpy@GLIBC_2.14' 未定义

linux - 使用 check_apt 时在 Nagios 中得到错误结果