在哪里安装Ubuntu/Debian上基于Qt的应用程序的文件

在哪里安装Ubuntu/Debian上基于Qt的应用程序的文件,qt,ubuntu,installation,debian,packages,Qt,Ubuntu,Installation,Debian,Packages,我正在寻找如何为Ubuntu/Debian发行版打包基于Qt的应用程序的技巧。假设应用程序(可执行文件)是myapp。运行objdump-pmyapp | 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 我已经

我正在寻找如何为Ubuntu/Debian发行版打包基于Qt的应用程序的技巧。假设应用程序(可执行文件)是
myapp
。运行
objdump-pmyapp | 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
中安装
myapp
,但我不确定ICU和Qt库。使用这些库的确切版本很重要。(他们正在使用的API草稿可能会在将来的版本中中断。)

  • 我希望避免“共享库地狱”,这样会使我倾向于将它们放在应用程序目录中(
    /usr/local/bin
    ),但Debian文件系统继承人标准似乎不鼓励这样做
  • 我可以将它们放在
    /usr/local/lib/myapp
    中,但如何确保动态链接正确的版本?如果我这样做,我需要做什么才能将这个目录添加到目标系统上的
    LD\u LIBRARY\u PATH
正如你所知,我对Ubuntu系统的打包还很陌生,所以我的方向可能是完全错误的。我很感兴趣地听到其他正在这样做的人说,他们发现什么最有效,特别是从稳定性和易于维护的角度来看

以下是我到目前为止看过的一些文档:

  • Debian策略手册(在系统上)
  • Debian开发者参考(系统上)
  • Debian新维护人员指南(关于系统)
您需要查看该部分。您不应该分发这些共享库,除非您是从代码中的源代码构建它们。这些库属于其他包,您需要将其列为包的依赖项或生成依赖项


你说你是Ubuntu系统的新手,你是为什么平台打包的?如果只是Windows,你就习惯了dll地狱。在Linux上更容易避免,因为您可以说它需要安装某些库,并且软件包安装程序知道如何查找这些库。

如果您真的想确保应用程序使用随附的库,只需在许可证允许的情况下进行静态链接可能是有意义的。由于您使用的是一个特殊的、特定版本的库,因此您不希望任何其他应用程序使用您的库,而不是包管理系统提供的系统库。我以前构建过Qt的静态版本,这有点不方便,但并不比构建Qt的通常动态链接版本更麻烦。我没有在重症监护病房工作过,但我想情况不会更糟


如果不行。。。是的,把它们都放在应用程序的目录中,整齐地远离系统的其余部分。根据我的经验,大多数做这类事情的应用程序不遵循任何官方发布标准,因此用户在这方面没有非常具体的期望。

我正在从源代码构建至少一个库,可能会进行一些修改。(如果是这种情况,我会在lib中添加一个后缀。)然后我该怎么办?此外,我是否可以告诉系统不允许使用未来版本,即so.44成为so.50的符号链接?我的用户大多会离线安装。如何告诉包管理器从脱机源查找依赖项?谢谢你的帮助!是的,到目前为止,我的经验是Windows。这里的解决方案似乎只是将所需的lib放到应用程序文件夹中,一切都很好。ICU图书馆建议所有平台采用该程序(除非我错误地阅读了文件)。。。因此我感到困惑。@Dave:看看这里:在dependen部分,您声明:
qt(=4.6.3)
或类似于您需要的每个库和版本。只需检查您正在使用的库的版本,并相应地设置条件。@Dave:Debian已经打包好了icu:而且它们似乎是根据版本命名的,这样可以简化依赖项列表。“将库放在应用程序文件夹中”主要用于Win32。您需要修改ICU库吗?如果你不需要的话,它会更简单。