代码之家  ›  专栏  ›  技术社区  ›  Dave Mateer

在Ubuntu/Debian上为基于qt的应用程序安装文件的位置

  •  2
  • Dave Mateer  · 技术社区  · 14 年前

    我正在寻找有关如何为Ubuntu/Debian发行版打包基于qt的应用程序的技巧。假设应用程序(可执行文件)是 myapp . 运行 objdump -p myapp | grep NEEDED ,我看到它有以下依赖项:

    libicuuc.so.44
    libicui18n.so.44
    libicudata.so.44
    libQtGui.so.4
    libQtCore.so.4
    libpthread.so.0
    libstdc++.so.6
    libm.so.6
    libgcc_s.so.1
    libc.so.6
    

    我已经浏览了一些在线文档(列在这个问题的末尾),但仍然对 安装实际文件的位置 .

    Debian文件系统层次结构标准建议(我认为)安装 迈阿普 在里面 /usr/local/bin 但我不确定重症监护室和qt-libs。使用这些库的确切版本是很重要的。(他们有正在使用的草稿API,这些API可能会在将来的版本中中断。)

    • 我想避免“共享库地狱”,这样我会倾向于将它们放在应用程序目录中。( /urr/本地/ bin 但是Debian文件系统继承标准似乎不鼓励这样做。
    • 我可以把它们放进去 /usr/local/lib/myapp 但是如何确保正确的版本是动态链接的呢?如果我这样做,我该怎么做才能把这个目录添加到 LD_LIBRARY_PATH 在目标系统上?

    如你所知,我对Ubuntu系统的打包还很陌生,所以我的方向可能完全错误。我很感兴趣的是听到其他人这样做,他们发现什么工作效果最好,特别是从稳定性和易于维护的角度。

    以下是迄今为止我已经看过的一些文档:

    2 回复  |  直到 14 年前
        1
  •  3
  •   Adam W    14 年前

    你需要看看 control 部分。除非您是从代码的源代码构建这些共享库,否则不应该分发它们。这些库属于您需要作为包的依赖项或构建依赖项列出的其他包。

    你说你刚开始在Ubuntu系统上进行打包,你为什么平台打包?如果它只是Windows,那么您就习惯了动态链接库。在Linux上更容易避免,因为 可以 假设它需要安装某些库,包安装程序知道如何查找这些库。

        2
  •  0
  •   wrosecrans    14 年前

    如果您真的想确保应用程序使用附带的库,那么只进行许可证允许的静态链接可能是有意义的。由于您使用的是库的特殊特定版本,因此您不希望任何其他应用程序使用库,而不是包管理系统提供的系统库。我之前已经构建了qt的静态版本,这有点不方便,但比构建通常的动态链接版本要简单得多。我没有在重症监护室工作过,但我想情况不会更糟。

    失败了…是的,把它都放在应用程序的目录中,与系统的其他部分完全隔离。根据我的经验,大多数这样做的应用程序不遵循任何官方发布标准,因此用户在这方面没有非常具体的期望。