kel*_*ano 5 installation debian boost cmake cpack
我正在尝试为我的一个项目创建一个 debian 包,但遇到了 boost 版本支持的问题。
我也确实看这个问题。它很相似,但提供的解决方案(Build-Depends)并不真正适用于我,因为我正在制作二进制安装程序。
基本上,我安装的库和可执行文件总是链接到 libboost_(component).so.1.46 而不是符号链接库 libboost_(component).so。让我的 debian 安装程序只能由拥有我的确切 boost 版本的人使用。我正在使用 CPack 制作 debian 包,我的depends 行如下所示:
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libboost-dev (>= 1.46),
libboost-thread-dev (>= 1.46),
libboost-signals-dev (>= 1.46),
libboost-system-dev (>= 1.46),
libboost-filesystem-dev (>= 1.46),
libboost-python-dev (>= 1.46), ..." )
Run Code Online (Sandbox Code Playgroud)
我是否需要为所述平台上的每个平台或该平台的 boost 版本构建单独的安装程序?
虽然我理解您想要创建一个适用于所有 boost 版本的软件包的意图,但您确实必须问自己这是否真的可能。
.so版本(例如.so.1.46vs )的想法.so.1.48实际上是表明库接口(ABI)已更改,这基本上表明库不兼容。
因此,您链接的应用程序实际上不太可能libboost_foo.so.1.46与libboost_foo.so.1.48. 很可能您的应用程序所需的符号突然消失了(因此您的应用程序将拒绝启动)。更糟糕的是,符号的含义可能在版本之间发生了变化,导致难以跟踪未定义的行为。
这就是为什么每当您链接到 时libfoo.so,二进制文件实际上链接到libfoo.so.1(或libfoo.so真正指向的地方)
现在debian 的政策是,对于任何不兼容的 ABI 更改,必须更改包名称。这基本上允许用户同时安装同一库的两个版本(例如 boost-1.46 和 boost-1.49)。
如果您的目标是特定版本的 Debian,则可以确定特定版本的库将可用。例如,在 Debian/wheezy 上您将拥有 boost-1.49。因此,如果您提供 Debian/wheezy 的软件包,则只需链接到 boost-1.49。这也是版本如此出色的原因之一:它在某种程度上保证了所有需要的库都可用。
这也意味着,即使没有“上游”版本,您也可以在多个 Debian 版本中拥有同一应用程序的不同软件包版本:由于依赖项的升级(涉及 soname 更改),必须重建软件包
所以得出结论:
链接到实际的库版本是一项保持系统正常运行的功能
debian 允许同时安装同一库的多个版本
您的问题的解决方案:
为每个 debian版本提供软件包将使这比看起来简单得多(因为每个版本只有一组固定的库)。
| 归档时间: |
|
| 查看次数: |
1995 次 |
| 最近记录: |