我有两个相同库但具有非常不同的API的包。每个库版本都应有自己的包,例如lib1.deb和lib2.deb。 我不想重命名所有的lib和头文件,以使它们可共存,但是一些libs / headers将具有相同的路径/相互覆盖。在“控制”文件中,当f.i。使用debuild生成一个包,我可以以某种方式指定一个在安装我的其他包的同时不能安装的包吗? 如果在尝试安装package2时,它会自动想要删除package1。我想在安装软件包时我已经看到了类似的内容。
答案 0 :(得分:1)
你仍然应该考虑让这些软件包可以共同安装(想象一下,你需要安装一个图形程序,apt
想要删除你的整个网络堆栈,只是因为一些“聪明”的软件包维护者认为它是更容易放入Conflicts
而不是解决问题。)
通常情况并非如此:
将所有头文件放入特定于库的子目录中,例如: /usr/include/lib1/
resp。 /usr/include/lib2/
(任何编写良好的库都应提供pkg-config文件,无论如何都需要更新。)
通常,库文件很少,主要是3(libfoo.so.x.y
,libfoo.so.x
,libfoo.x
)。单独重命名它们应该很容易。 (并再次更新您的pkg-config文件以反映名称更改)。
最后:“两个相同库的包但具有非常不同的API ”听起来像是一个非常糟糕的非常糟糕的想法。如果他们没有相同的 API / ABI,为什么他们是相同的库?
哦,如果这只是(不兼容的)版本,这通常被处理为:
libfoo3
是包含ABI版本3的libfoo
的包,例如它提供/usr/lib/libfoo.so.3.14
和/usr/lib/libfoo.so.3
,这是前者的符号链接libfoo7
是包含ABI版本7的libfoo
的包,例如它提供/usr/lib/libfoo.so.7.42
和/usr/lib/libfoo.so.7
这是前者的符号链接)
libfoo-dev
是开发包,它为正确的 ABI soname(/usr/lib/libfoo.so
resp /usr/lib/libfoo.so.3
)提供标题和符号链接/usr/lib/libfoo.so.7
。这个包在正确的Depends
上有一个libfooX
,使用的是精确的版本说明符。您只能安装单个版本的libfoo-dev
(因为apt
禁止多次安装单个程序包)。
但是,您可以并行安装libfoo3
和libfoo7
(这对使用它的应用程序很重要)。
答案 1 :(得分:0)
嗯,在stackexchange上找到了一篇涵盖https://unix.stackexchange.com/a/393243
的帖子有"休息"和"冲突"关键字貌似https://www.debian.org/doc/debian-policy/#conflicting-binary-packages-conflicts