如何在deb软件包中打包共享库

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

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

因此,我将我的共享库(例如libabc.so)放在/usr/lib/myapp/目录中。在创建Debian软件包后,由于加载器没有搜索/usr/lib/myapp/目录来加载该目录,二进制文件无法加载。他们不推荐在二进制文件中使用RPATH
那么,在Debian软件包中,我应该做出哪些更改,或者在postinst文件或其他地方进行什么操作才能使其正常工作呢?

无法加载您的共享库的二进制的本质是什么?它安装在哪里?它是否使用系统的动态链接器或dlopen - Robie Basak
@RobieBasak 这是一个使用libmetalink.so库的Qt应用程序。二进制文件安装在/usr/bin/目录下。我不知道dlopen或动态链接器是什么。 - adnan kamili
1个回答

不,你的共享库应该被安装在以下位置之一:
- 直接安装到 `/usr/lib` - 或者在 `/usr/lib` 中创建一个快捷方式,指向 `/usr/lib/`
手册的意思是:
- 通过“支持文件”来支持你的程序扫描自身的插件和模块(以二进制形式)。这些文件可以是共享库 `.so` 或其他任何格式,甚至是自定义格式。 - 通过“运行时支持程序”来支持你的程序,但对用户来说直接运行它们没有用处。因此,建议避免将它们安装到 `/usr/bin`。
文本格式的支持文件(至少不是生成的二进制文件)更方便安装在 `/usr/share/`。
我建议你参考其他软件包的示例。
tree /usr/lib/libreoffice/
tree /usr/lib/gimp/