我有一个库和一些二进制文件,我想将它们打包为 Debian 软件包。我依赖:libboost-log*、libprotobuf* 等。
我不想添加对开发包“libboost-all-dev”等的依赖,而想添加对非开发包的依赖。通过查看 ubuntu 包存档,我意识到其中一些库在不同版本的 ubuntu 中更改了名称:
libboost-filesystem1.65 和 libboost-filesystem1.58
我是否需要为每个 Ubuntu 版本(14、16、18 等)创建单独的包?
此外,我的二进制文件是在 ubuntu 18 上编译的,并且链接到最新版本的 boost (1.65)。当我在旧版本 (ubuntu 16,其中 boost 版本为 1.58) 上打包并安装相同的文件时,运行二进制文件时出现错误。
myprog:加载共享库时出错:libboost_system.so.1.65.1:无法打开共享对象文件:没有此文件或目录
有没有一种方法可以让我仅在 ubuntu 版本上通过二进制进行编译并指定依赖项,以便包可以在所有 ubuntu 版本上运行?
答案1
有没有一种方法可以让我仅在一个版本的 Ubuntu 上通过二进制文件进行编译,并指定依赖项,以便软件包可以在所有版本的 Ubuntu 上运行?
对于 deb,一般来说,不行。Ubuntu 中提供的依赖项可能会破坏版本之间的 ABI,因此特定依赖项在两个特定 Ubuntu 版本之间提供的版本中可能没有通用的 ABI。
如果您想使用 debs 维护反向移植,则需要根据每个版本单独管理反向移植。
嵌入依赖项是解决此问题的一种方法。请参阅Snap有关详细信息。理论上,您也可以使用 debs 执行此操作,但您可能会发现围绕 snap(snapcraft)的工具使创建过程变得更容易。Snap 对用户来说也更安全,因为它们在受限环境中运行。