为多个Ubuntu版本创建Debian软件包

我有一个库和一些二进制文件,我想将它们打包成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: error while loading shared libraries: libboost_system.so.1.65.1: cannot open shared object file: No such file or directory
是否有办法让我只在一个版本的Ubuntu上编译二进制文件,并以一种使软件包在所有Ubuntu版本上正常工作的方式指定依赖关系?
1个回答

有没有办法我可以在一个版本的Ubuntu上编译我的二进制文件,并以一种指定依赖关系的方式使软件包适用于所有Ubuntu版本?
对于deb软件包来说,一般来说是不行的。Ubuntu中提供的依赖关系可能会在发布之间破坏ABI,以至于某个特定的依赖关系在两个特定的Ubuntu版本之间的版本中没有共同的ABI。
如果您想使用deb软件包来维护后备版本,那么需要根据每个版本单独管理后备版本。
嵌入依赖关系是解决这个问题的一种方法。请参阅Snaps了解详细信息。理论上,您也可以使用deb软件包来实现这一点,但您可能会发现与snaps(snapcraft)相关的工具使其更容易创建。对用户来说,snaps更安全,因为它们运行在受限环境中。