第三方依赖项的打包最佳实践

第三方依赖项的打包最佳实践

我第一次为 Ubuntu 打包应用程序。我有几个依赖项,主要是 Qt 和 ICU。我只是不清楚如何在不陷入 Linux 的 dll 地狱的情况下部署这些应用程序。

例如,我想使用 Qt 4.7.4 版本,因为该版本中有一些我想利用的错误修复。我还想在当前支持的所有 Ubuntu 版本上部署我的应用程序,这让我回到了 Lucid。但 Lucid 的最新版本是 4.6.2,它甚至与 4.7.4 不兼容 API。在我看来,选项如下:

  • 只能说“强硬”,并且仅支持具有我需要的库的 Ubuntu 版本,这意味着 Oneiric。对于早期版本,他们需要自己找到 4.7.4 库并解决其所有依赖关系。
  • 提供库的私有版本,例如 libQtCore4_mycompany,以及用于安装它们的包。
  • 将程序集的私有版本与我的应用程序并排放置(也许/opt/company/package/lib),并LD_LIBRARY_PATH在执行我的应用程序之前进行设置。

这些都不是很好的选择,尤其是debuild如果你稍稍偏离了它们的预期,使用起来就很糟糕。由于 LGPL 限制(至少,我是这么理解的),我无法进行静态链接。

我也有相反的问题。假设我决定依赖libQtCore4 (>= 4.7.4)。我已经看到 Qt 版本之间出现足够多的回归,4.7.5 或 4.8.0 可能会破坏我的应用程序中的某些内容。这只是你必须处理的事情,还是最好依赖于库的确切版本,例如libQtCore4 (= 4.7.4)

答案1

如果您确实想支持没有所需库版本的版本,那么只需使用静态链接即可。如果您是唯一的用户,共享库就违背了共享库的目的,因此您不妨将其全部放在一个二进制文件中。您甚至可以节省一些空间,因为您不调用的库部分将被丢弃。

我建议您从仅正常列出依赖项的 oneiric 构建开始,然后在将其移植到旧版本时切换到静态链接。

相关内容